前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java并发技术总结之一——Java线程池

Java并发技术总结之一——Java线程池

作者头像
剑影啸清寒
发布2020-07-15 15:54:54
4180
发布2020-07-15 15:54:54
举报
文章被收录于专栏:琦小虾的Binary琦小虾的Binary

一. Java 线程池

1.1 实现

  1. 线程数小于 coreSize,创建线程,直到 coreSize 的数量;
  2. BlockingQueue 一直堆积线程;堆积到 BlockingQueue 的最大容量,此时开始开启线程,直到 maxSize;
  3. 如果到了 maxSize 的线程数,BlockingQueue 依然是满的,则开始对新添加进入的任务实行拒绝(按照拒绝策略);
  4. 如果线程数量大于 coreSize,而且有的线程空闲时间超过了 keepTimeAlive,则释放该资源;

注:1, 2, 3 步骤在 ThreadPoolExecutor # execute(Runnable command) 方法中;

1.2 核心构造参数

  • coreSize: 核心线程数量,平时维持的线程数量;
  • maxSize: 最大线程数量,如果 BlockingQueue 任务队列里堆积的任务过多,超过了队列限定最大值,则线程增多,增多至 maxSize 的线程数量;
  • BlockingQueue<Runnable>: 任务队列,向其中放任务;可通过设定队列最大长度,设置最大任务数量;
  • keepTimeAlive: 如果当前线程数量大于 coreSize,且线程空闲超过 keepTimeAlive 值,则释放该线程,最多释放到 coreSize 的线程数量;
  • RejectPolicy: 拒绝策略;当队列已满,再向其中塞任务时的拒绝策略;
  • threadFactory: 线程工厂,使用各自的方法生产线程;比如可以使用 NamedThreadFactory,可以为线程池命名;

1.3 拒绝策略

  • ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出 RejectedExecutionException 异常。
  • ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
  • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程);
  • ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务 ;

参考地址:《线程池ThreadPoolExecutor实现原理》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. Java 线程池
    • 1.1 实现
      • 1.2 核心构造参数
        • 1.3 拒绝策略
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档