专栏名称: 顶尖架构师栈
分享业务架构、技术架构、系统设计方案,以及微服务架构源码,提供业务场景答疑
今天看啥  ›  专栏  ›  顶尖架构师栈

血泪教训,8 个线程池最佳实践和坑

顶尖架构师栈  · 公众号  ·  · 2024-08-12 08:01

文章预览

1. 正确声明线程池 线程池必须手动通过  ThreadPoolExecutor  的构造函数来声明,避免使用 Executors  类创建线程池,会有 OOM 风险。 Executors  返回线程池对象的弊端如下(后文会详细介绍到): FixedThreadPool  和  SingleThreadExecutor  :使用的是无界的  LinkedBlockingQueue ,任务队列最大长度为  Integer.MAX_VALUE ,可能堆积大量的请求,从而导致 OOM。 CachedThreadPool  :使用的是同步队列  SynchronousQueue , 允许创建的线程数量为  Integer.MAX_VALUE  ,可能会创建大量线程,从而导致 OOM。 ScheduledThreadPool  和  SingleThreadScheduledExecutor  : 使用的无界的延迟阻塞队列 DelayedWorkQueue ,任务队列最大长度为  Integer.MAX_VALUE ,可能堆积大量的请求,从而导致 OOM。 说白了就是: 使用有界队列,控制线程创建数量。 除了避免 OOM 的原因之外,不推荐使用  Executors 提供的两种快捷的线程池 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览