Java获取CPU数量及线程池怎样设置最大线程数量公式

时间:2020-9-2 作者:admin


1、Java获取CPU核数代码:


System.out.println(Runtime.getRuntime().availableProcessors()); //输出本机CPU的数量,是一个数字

2、线程池设置最大线程数量公式:

(1)线程池大小 = CPU的数量 × 目标CPU的使用率 × (1+等待时间与计算时间的比)

(2)一般情况:

IO密集型应用,则线程池大小设置为 2N+1 (N为CPU数量,下同)

CPU密集型应用,则线程池大小设置为 N+1

IO密集型和 CPU密集型简单来说就是看服务器是注重CPU运算还是IO传输

3、在项目中一定要注意线程池的使用要严谨,不要使用Executors去直接调用API去创建线程池,要使用ThreadPoolExecutor(阿里内部也明确规定这一点)

(1)七大参数


ExecutorService service = new ThreadPoolExecutor(//1、核心线程 2、最大线程
                5, 5, 0, TimeUnit.SECONDS,//3、空闲等待时间 4、等待时间单位
                new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),//5、等待队列 6、线程工厂
                new ThreadPoolExecutor.AbortPolicy());//7、拒绝策略
                

(2)四种拒绝策略:
Java获取CPU数量及线程池怎样设置最大线程数量公式
(3)四种阻塞队列:

1、SynchronousQueue —– 直接提交队列
2、ArrayBlockingQueue —–有界任务队列
3、LinkedBlockingDeque —-无界任务队列
4、PriorityBlockingQueue —优先任务队列

有用点个关注,手留余香! 😗 😗 😗

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。