java.lang.IllegalArgumentException: null ERROR c.s.f.w.e.GlobalExceptionHandler - [handleRuntim
·
public ThreadPoolTaskExecutor getExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(Runtime.getRuntime().availableProcessors() + 1);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("HrMeeting-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
报错如下:java.lang.IllegalArgumentException: null

参考博客:ThreadPoolExecutor创建线程池启动项目报错问题 - 疯子110 - 博客园
核心原因:corePoolSize有可能大于等于maximumPoolSize,导致报错。
将代码修改为:
private ThreadPoolTaskExecutor getExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 获取 CPU 逻辑线程数,并保证 corePoolSize 不超过 maxPoolSize
int availableProcessors = Runtime.getRuntime().availableProcessors();
int maxPoolSize = 20;
int corePoolSize = Math.min(availableProcessors + 1, maxPoolSize);
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("HrMeeting-");
executor.setRejectedExecutionHandler(new java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
解决。
更多推荐


所有评论(0)