1、spring管理的异步线程数量有限,如果是web项目的话,线程数量由tomcat的线程池配置有关系,所以最好自己配置线程配置类。代码如下:
/**
* springboot里面创建异步线程配置类
* @author kouyy
*/
@Configuration
@EnableAsync
public class ThreadAsyncConfigurer implements AsyncConfigurer {
@Bean
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
//设置核心线程数
threadPool.setCorePoolSize(10);
//设置最大线程数
threadPool.setMaxPoolSize(100);
//线程池所使用的缓冲队列
threadPool.setQueueCapacity(10);
//等待任务在关机时完成--表明等待所有线程执行完
threadPool.setWaitForTasksToCompleteOnShutdown(true);
// 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止
threadPool.setAwaitTerminationSeconds(60);
// 线程名称前缀
threadPool.setThreadNamePrefix("MyAsync-");
// 初始化线程
threadPool.initialize();
return threadPool;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
2、异步回调,异步方法执行完之后,我怎么才能让用户知道我已经调用成功了呢?异步方法返回Future类型的结果对象,然后通过websocket将执行消息发送给用户界面
//异步方法返回Future<String>对象
@Async
public Future<String> doTask() throws Exception {
System.out.println("开始做任务");
long start = System.currentTimeMillis();
Thread.sleep(1000);
long end = System.currentTimeMillis();
System.out.println("完成任务,耗时:" + (end - start) + "毫秒");
return new AsyncResult<>("任务一完成");
}
消息发送给用户界面请关注下一篇文章