大綱:
- spring啟動異步線程
- spring配置線程池
一、spring啟動異步線程
spring啟動異步線程方法就是在方法上加上注解@Async,然后啟動類或配置類上加上注解@EnableAsync
@Service public class TestService { @Async public Future exec(){ Future future = new AsyncResult("dududududu"); System.out.println(Thread.currentThread().getName()+111111); return future; } }
這種方式在每次執行這個方法的時候都會啟動一個線程去執行這個方法。Future可以返回執行結果,這個方法也可以返回void。
二、spring配置線程池
@Configuration @EnableAsync public class Config { @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(3); executor.setQueueCapacity(200); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("aaaaaa-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; } @Bean public Executor taskExecutor1() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(2); executor.setMaxPoolSize(3); executor.setQueueCapacity(200); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("bbbbbbb-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); return executor; } }
上面的配置文件配置了2個線程池
應用的時候在@Async的值里配置上線程池的名稱就可以了
@Service public class TestService { @Async("taskExecutor1")//使用上面配置的taskExecutor1線程池 public Future exec(){ Future future = new AsyncResult("dududududu"); System.out.println(Thread.currentThread().getName()+111111); return future; } }