一,配置异步线程池
@EnableAsync //启动异步线程
public class WebConfig implements WebMvcConfigurer {
@Bean("taskExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(10);
taskExecutor.setMaxPoolSize(20);
taskExecutor.setQueueCapacity(100);
taskExecutor.setThreadNamePrefix("asyncTask");
return taskExecutor;
}
}
二,使用
方法1:注解 @Async
@Async
public void test(){
System.out.println("线程ID:" + Thread.currentThread().getId() + "线程名字:" +Thread.currentThread().getName()+"执行异步任务:");
}
方法2:使用对象
public class Test{
@Autowired
@Qualifier("taskExecutor")
public ThreadPoolTaskExecutor executor;
public void test2() {
executor.execute(()->{
System.out.println("线程ID:" + Thread.currentThread().getId() + "线程名字:" +Thread.currentThread().getName()+"执行异步任务:");
});
}
}
以上是不返回值的情况;
execute()
,执行一个任务,没有返回值submit()
,提交一个线程任务,有返回值
返回值的
@Async
public Future<String> executeAsyncPlus(Integer i) throws Exception {
System.out.println("线程ID:" + Thread.currentThread().getId() +"线程名字:" +Thread.currentThread().getName()+ "执行异步有返回的任务:" + i);
return new AsyncResult<>("success:"+i);
}
Future<String> result = service.executeAsyncPlus(i);
result.get();