Runtime.getRuntime().availableProcessors();//获取cpu核心数
maximumPoolSize取值依据
CPU密集的意思是该任务需要大量的运算,没有阻塞,CPU一直全速运行。
CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),
在单核CPU上开多少个多线程任务都不可能得到加速,因为与运算能力就那些
密集型任务配置尽可能少的线程数量:一般公式:CPU核数+1个线程的线程池
只要不死使劲作类型
io密集型方案1测试环境疯狂测试公式:cpu核心数*2
io密集型方案2
即该任务需要大量的io(数据库、redis等疯狂读写)会大量的阻塞
单线程上运行io密集型任务会导致浪费大量的CPU运算力
所以在io密集型任务中使用多线程可以大大加速程序运行,即使在单核CPU上,这种加速主要就是利用了被浪费的阻塞时间
io密集型时,大部分线程被阻塞,故需要多配置线程数
参考公式:CPU核心数/1-阻塞系数 阻塞系数在0.8~0.9之间
比如8核CPU:8/(1-0.9) = 80个线程数
private static ThreadFactory factory = new ThreadFactoryBuilder().setNameFormat("线程名称-%s").build();
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2,
5, 1L,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(3),
factory, new ThreadPoolExecutor.CallerRunsPolicy());
public static void main(String[] args) {
threadPoolExecutor.execute(() -> {
//
});
}