美文网首页
ThreadPool And Worker

ThreadPool And Worker

作者: Ylm007 | 来源:发表于2020-05-13 21:01 被阅读0次

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

相关文章

网友评论

      本文标题:ThreadPool And Worker

      本文链接:https://www.haomeiwen.com/subject/rkoonhtx.html