车驰夜幕|ThreadPoolExecutor线程池实现原理+源码解析( 七 )

仔细看下这四种线程池 , 最终都调用了ThreadPoolExecutor的构造方法 , 只是传递的参数有所不同 。

  • CachedThreadPool和ScheculedThreadPool设置的最大线程数都是Integer.MAX_VALUE , 可能线程数过多而产生OOM
  • SingleThreadExecutor和FixedThreadPool使用的都是无界队列 , 最大元素个数为Integer.MAX_VALUE , 可能缓冲队列中堆积的任务过多 , 而产生OOM
这两点正是阿里巴巴代码规范里禁止使用这四种线程池的原因 。 想要使用线程池 , 必须通过ThreadPoolExecutor的方法来创建线程池 。
总结使用线程池需要注意的几点如下:
  • 合理设置七个参数
  • 自定义ThreadFactory , 给每个线程设置有意义的名称
  • 自定义RejectedExecutionHandler , 处理线程池饱和时的逻辑
使用线程池之前一定要十分明确每个参数的意义以及对其他参数的影响 , 才能更加合理的使用线程池 。
作者:Sicimike
原文链接: