为什么阿里巴巴不让使用JDK自带的线程池?

阿里巴巴建议开发者避免使用Executors工厂方法创建线程池,因为这可能导致资源耗尽和监控困难。他们提倡使用ThreadPoolExecutor以提供更好的控制、资源管理及性能优化。Hutool封装的工具简化了线程池配置。
摘要由CSDN通过智能技术生成

阿里巴巴在《阿里巴巴Java开发手册》中建议开发者不要直接使用 java.util.concurrent.Executors 类中的静态工厂方法来创建线程池,而是推荐直接使用 ThreadPoolExecutor 类来实例化线程池,主要原因如下:

  1. 资源耗尽的风险: JDK内置的 Executors 工厂方法创建的线程池往往具有固定的配置,比如 newFixedThreadPool 创建的是固定大小线程池,newCachedThreadPool 创建的是可无限扩大的线程池,这些配置可能并不适用于所有的场景。尤其像 newCachedThreadPool,如果不加以控制,当任务量过大时,可能导致创建过多线程,进而耗尽系统资源(如内存),甚至引发 OutOfMemoryError 错误。

  2. 拒绝策略不明确Executors 提供的预设线程池配置对拒绝策略的处理不够明确,开发者可能不清楚在任务堆积严重时,线程池具体是如何处理新提交的任务的。而直接使用 ThreadPoolExecutor 可以让开发者显式指定拒绝策略,对系统的稳定性和可控性有更好的把握。

  3. 线程池参数优化ThreadPoolExecutor 允许自定义更多的参数,如线程存活时间、队列类型和大小等,这样可以根据实际应用场景调整线程池行为,使之更符合业务需求,提高性能并防止潜在的问题。

  4. 监控和调试难度: 自定义线程池可以更容易地集成到监控系统中,方便开发者随时观察线程池的状态,及时发现问题并进行调整。

总结起来,阿里巴巴之所以推荐使用 ThreadPoolExecutor 手动创建线程池,是为了增强系统稳定性,降低资源耗损风险,并提升开发者对线程池行为的控制能力。

?你们是怎么使用了?

使用hutool封装好的工具,如果公司不使用hutool或者用以下代码(也是hutool里的)

ExecutorService executor = ExecutorBuilder.create()
	.setCorePoolSize(5)
	.setMaxPoolSize(10)
	.setWorkQueue(new LinkedBlockingQueue<>(100))
	.build();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值