1.配置线程池
@EnableAsync
@Configuration
@Slf4j
public class AsyncConfig {
/**
* 核心线程数为服务器的cpu核心数
*/
private static int CORE_POOL_SIZE = 4;
/**
* 线程池中允许的最大线程数
*/
private static int MAX_POOL_SIZE = 2 * CORE_POOL_SIZE + 1;
/**
* 工作队列大小
*/
private static int QUEUE_CAPACITY = 500;
/**
* 线程名
*/
private static final String THREAD_NAME = "韵享基础服务-thread";
/**
* 存活时间
*
* @return
*/
private static final int KEEP_ALIVE_TIME = 10;
@Bean("threadPoolExecutor")
public Executor getAsyncExecutor() {
log.info("核心线程数: " + CORE_POOL_SIZE + " 最大线程数: " + MAX_POOL_SIZE);
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//核心线程数
executor.setCorePoolSize(CORE_POOL_SIZE);
//最大线程数
executor.setMaxPoolSize(MAX_POOL_SIZE);
//队列大小
executor.setQueueCapacity(QUEUE_CAPACITY);
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setThreadNamePrefix(THREAD_NAME);
//存活时间
executor.setKeepAliveSeconds(KEEP_ALIVE_TIME);
// 拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
return executor;
}
2.使用
@Slf4j
@Service
public class ClaimAllotTaskAction extends AbstractAction implements IAction {
@Resource
private Executor threadPoolExecutor;
try {
threadPoolExecutor.execute(() -> issueMessageService.issueMessage(themisComplain.getComplainId(), Long.valueOf(claimTask.getAssignedSite()), claimTask.getTaskType(), req.getLoginSiteName(), req.getLoginUserName()));
} catch (Exception e) {
log.error("下发留言提醒失败", e);
}