为什么阿里巴巴不允许使用Executors?
阿里巴巴开发手册关于线程池有这样一条规定:
线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
那你知道为什么阿里不推荐Executors去创建线程池吗?因为要想合理的配置线程池,就必须首先分析任务特性,而Java自带的Executors很显然满足不了你特殊的业务,所以我们尽可能的自定义线程,那如何自定义线程?
我们可以从以下几个角度来进行分析:
1.任务的性质:CPU密集型任务,IO密集型任务和混合型任务。
2.任务的优先级:高,中和低。
3.任务的执行时间:长,中和短。
4.任务的依赖性:是否依赖其他系统资源,如数据库连接。
任务性质不同的任务可以用不同规模的线程池分开处理。CPU密集型任务配置尽可能少的线程数量。IO密集型任务则由于需要等待IO操作,线程并不是一直在执行任务,则配置尽可能多的线程, 混合型的任务,如果可以拆分,则将其拆分成一个CPU密集型任务和一个IO密集型任务,只要这两个任务执行的时间相差不是太大,那么分解后执行的吞吐率要 高于串行执行的吞吐率。
不同种类的任务,在我们日常开发又该如何配置线程池?做我们的任务做到降低资源消耗、提高响应速度、提高线程的可管理性等性能问题了?
别慌!你离线程池调优只差一个引路人,这次我们为大家开设了一堂大型互联网线程池调优实战训练营,仅需0.02元,让你彻底填补并发编程这块的短板。
课程加餐福利:
1、自旋锁&可重复锁&公平锁&共享锁&分段锁你都知道吗?
2、无锁&偏向锁&轻量级锁&重量级锁如何膨胀升级?
3、Lock底层AQS实现与Synchronized底层实现异同?
4、LongAdder的分段CAS优化机制如何设计的?
5、Java多线程内存模型底层如何实现的?
6、volatile底层的内存屏障是如何实现的?
预习资料领取:
面试和开发过程中,理论和基础都是开发人员都必须掌握的,尤其是开发越往后走,瓶颈期也越大。掌握并发编程的理论与实践技术,将拉开与其他小伙伴的差距。
课程将深入大型互联网并发线程池原理与调优实战,避免在高并发的环境下遇到的一些问题。扫码即刻购课:
☟戳阅读原文也可购课~