一线大厂面试真题——为什么阿里巴巴的Java开发手册不建议使用Java自带的线程池

89 阅读1分钟

既然线程池这么好,为什么阿里巴巴的Java开发手册不建议使用呢?

于是去手册上看到了原文内容。发现是“线程池不允许使用Executors去创建”。

看到这句话,就理解原因了。

Executors里面默认提供的几个线程池是有一些弊端的,如果是不懂多线程、或者是新手直接盲目使用,就可能会造成比较严重的生产事故。

第一个,FixedThreadPool和SingleThreadPool中,阻塞队列长度是Integer.Max_Value,一旦请求量增加,就会堆积大量请求阻塞在队列中,可能会造成内存溢出的问题。

第二个,CachedThreadPool和ScheduledThreadPool中最大线程数量是Integer.Max_value,一旦请求量增加,导致创建大量的线程,使得处理性能下降。甚至可能会出现宕机的问题。为了避免这类问题出现,们可以直接实例化ThreadPoolExecutor,然后自己设置参数的值,从而确保线程池的可控性。

实际上,很多源码或者中间件里面,都是使用这类的方式。