首先配置线程池
@Configuration
public class PoolConfig implements AsyncConfigurer {
@Bean
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
int core = Runtime.getRuntime().availableProcessors();
//设置核心线程数
executor.setCorePoolSize(core);
//设置最大线程数
executor.setMaxPoolSize(core*2 + 1);
//除核心线程外的线程存活时间
executor.setKeepAliveSeconds(3);
//等待队列
executor.setQueueCapacity(40);
// 设置默认线程名称
executor.setThreadNamePrefix("Test-");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
return executor;
}
}
2.方法
有返回值的新线程
Future<Integer> pArraignmentRoomFuture = threadPoolTaskExecutor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return 1;
}
});
Integer pArraignmentRoomDTO = pArraignmentRoomFuture.get(30, TimeUnit.SECONDS);
没有返回值的新线程
threadPoolTaskExecutor.execute(new Runnable() {
@Override
@Transactional
public void run() {}});
3.测试代码
@RequestMapping("/query")
public List<User> query() {
threadPoolTaskExecutor.execute(new Runnable() {
@Override
public void run() {
System.out.println(1);
}
});
return userService.query();
}