线程先达到corePoolSize, 达到了去排队 ,队列满了就去新建线程,达到了maxPoolSize ,就执行拒绝策略了。
所以大家在取queueSize的时候,就要取getThreadPoolExecutor().getPoolSize(),getThreadPoolExecutor().getQueue().size()值和。判断是否超出队列的时候,就要判断queueCapacity,maxPoolSize之和。
ThreadPoolTaskExecutor thread=new ThreadPoolTaskExecutor();
thread.setCorePoolSize(3);
thread.setKeepAliveSeconds(10);
thread.setMaxPoolSize(10);
thread.setQueueCapacity(50);
thread.initialize();
int queueSize = thread.getThreadPoolExecutor().getPoolSize()+thread.getThreadPoolExecutor().getQueue().size();
while (queueSize >= 60) {
try {
TimeUnit.MILLISECONDS.sleep(5);
} catch (InterruptedException e) {
logger.warn("当前线程池已满,请等待任务完成...", e);
}
queueSize = thread.getThreadPoolExecutor().getQueue().size()+thread.getThreadPoolExecutor().getPoolSize();
}