ThreadPool And Worker

Jdk原生线程池

  • 容易误解的地方:core线程已满的情况下,先放queue,queue也满了的情况下,才会扩建线程,直到maxSize后,才执行拒绝策略;
image.png
  • 提交task,都发生了什么呢?
  1. 当已创建的线程数小于coreSize时,add new worker;
  2. 当大于coreSize时,新提交的task放入queue中,等待消费;
  3. 当queue满了时,继续add new worker,最多创建max个worker
  4. worker负责执行task,worker有一个for;;无限循环过程,不断从queue中获取task,如果task没有时,可以阻塞get或者get null;


    image.png
  • 可能的坑
  1. task执行耗时太长导致线程池吞吐量太低,大量task被reject
  2. 线程池可以在初始化时即预热线程,因为提交task是同步方法,导致等锁挤压;
  3. Executors提供的几个常用常用的线程池,queue的size都是Integer.Max,如果消费的慢,很容易oom
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。