大纲:
- 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; } }