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

   日期:2020-09-04     浏览:368    评论:0    
核心提示:Java代码:System.out.println(Runtime.getRuntime().availableProcessors()); //输出本机CPU的数量,是一个数字线程池设置最大线程数量公式:线程池大小 = CPU的数量 × 目标CPU的使用率 × (1+等待时间与计算时间的比)有用点个关注,手留余香! ???? ???? ????...

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)四种拒绝策略:

(3)四种阻塞队列:

1、SynchronousQueue ------- 直接提交队列(直接就提交,没有队列进行等待)
2、ArrayBlockingQueue -------有界任务队列(不能及时执行的任务,放到自定义的队列中等待执行)
3、LinkedBlockingDeque -----无界任务队列(等待队列的大小是无界,理论上大小取决于内存大小)
4、PriorityBlockingQueue ----优先任务队列(这是一种特殊的无界任务队列,可以按照优先级来执行任务)

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

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服