一般来说池中总线程数是核心池线程数量两倍,只要确保当核心池有线程停止时,核心池外能有线程进入核心池即可。
我们所需要关心的主要是核心池线程的数量该如何设置。
自定义线程池代码
package com.lc.concurrent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class MyThreadPoolExecutor {
//最大可用的CPU核数
public static final int PROCESSORS=Runtime.getRuntime().availableProcessors();
//线程最大的空闲存活时间,单位为秒
public static final int KEEPALIVETIME=60;
//任务缓存队列长度
public static final int BLOCKINGQUEUE_LENGTH=500;
public ThreadPoolExecutor createThreadPool(){
return new ThreadPoolExecutor(PROCESSORS * 2,PROCESSORS * 4,KEEPALIVETIME,TimeUnit.SECONDS,
new ArrayBlockingQueue(BLOCKINGQUEUE_LENGTH));
}
}
线程中的任务最终是交给CPU的线程去处理的,而CPU可同时处理线程数量大部分是CPU核数的两倍&#x