JAVA线程池的线程数量配置

一 JAVA线程池的线程数量配置

         关于线程的配置,线程数量配置多少这个问题呢?往往不同的环境与不同的线程中的代码决定其配置的线程的数量。

二 常见的线程量配置

最常见的方式根据线程中处理的代码划分为CPU密集型IO密集型

  1.  CPU密集型:  线程池中配置的线程数量 = cpu核数量  
  2.  IO密集型就 :  线程池中配置的线程数量 = cpu核数量  * 2

这就是所谓的通用配置方法,合理吗?其实我们可以能过调试可以很好知道是否合理。

三 根据情况配置最佳线程数量

  以下是创建一个线程池的代码:

 private static ExecutorService createThreadPool() {
        ThreadPoolExecutor threadPool =  new ThreadPoolExecutor(32, 100,
                60L, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(1000));
        threadPool.setThreadFactory(new ThreadFactory() {
            private final AtomicInteger counter = new AtomicInteger(1);
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "test cpu-" + counter.getAndIncrement());
            }
        });

        return threadPool;
    }

 这里核心数,也就是线程的数最设置成32,但我本地的环境的cpu是8核的开发机

使用jdk自带的调式工具jvisualvm.exe 如下图:

 打开运行后的效果图:

说明:

       按本地开发机的8核cpu如果按上面的公式应该设置16核才合理,但现在要设置成32个线程数量才全理,如果设置成16线程,并发在11:50:45时就不够用并且要串联等待,而整体cpu占用还是非常的小,还有比较大的设置空间,这里每个线程是设备状态通知相关商家的http请求,如果后续商家继续增加这里可以结合线程所占用的空闲比,可以继续优化加大线程量。

四 总结

线程池的数量设计多少,应结合代码与所运行环境情况配置其运行数量。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qyhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值