美文网首页
线程池拒绝策略源码小析

线程池拒绝策略源码小析

作者: zcliu | 来源:发表于2017-11-10 15:03 被阅读0次
  • 提交一个新的task到线程池后,此时如果ThreadPool内的所有工作线程都在忙碌时(没有可用的线程去处理该task),并且任务队列也到达界限,这时候就需要用到拒绝策略。

  • 在 java.util.concurrent包下有个RejectedExecutionHandler接口,该接口定义了rejectedExecution方法,用来实现具体的拒绝行为。

image.png
  • 再往下看,Java预定义了四种拒绝策略:


    image.png

下面就分析一下这四种拒绝策略有什么不一样:

AbortPolicy

image.png

可以看到AbortPolicy其实就是直接抛了个exception,并丢弃该task。

DiscardPolicy

image.png

DiscardPolicy什么都没做,静静地丢弃该task

DiscardOldestPolicy

image.png

可以看到DiscardOldestPolicy会先通过poll方法,将任务队列的队头,也就是最旧的那个任务remove掉,然后将最新的task放进线程池

CallerRunsPolicy

image.png

可以看到,CallerRunsPolicy就是直接调用Runnable的实例方法run去执行该task,说白了就是该task直接由调用者线程来执行

后记

当然,以上四种拒绝策略只是jdk预定义的,我们也可以根据实际情况自定义拒绝策略,只需要实现RejectedExecutionHandler接口即可

相关文章

  • 线程池拒绝策略源码小析

    提交一个新的task到线程池后,此时如果ThreadPool内的所有工作线程都在忙碌时(没有可用的线程去处理该ta...

  • Java线程池拒绝策略

    【Java线程池拒绝任务策略】创建线程池可以指定拒绝策略如下: 一 拒绝时机1) 调用线程池的shutdown函数...

  • ThreadPoolExecutor

    线程池 拒绝策略 线程池的拒绝策略,即任务被添加到线程池中被拒绝而采取的处理措施。任务被拒绝的原因可能有: 线程池...

  • 多线程juc线程池

    java_basic juc线程池 创建线程池 handler是线程池拒绝策略 排队策略 线程池状态 RUNNIN...

  • ThreadPoolExecutor的RejectedExecu

    java 线程池ThreadPoolExecutor的拒绝策略有: CallerRunsPolicy : 当线程池...

  • 安卓面试笔记

    OKhttp线程池策略,线程池丢弃策略,jsbridge原理与native交互过程,okhttp源码,子线程之间通...

  • 线程池

    线程池执行过程 线程池生命周期 线程池分类 阻塞队列 拒绝策略 - ThreadPoolExecutor.Abor...

  • 线程池概述

    为什么要使用线程池? 线程池核心参数 线程池的几种拒绝策略 execute()和submit()的区别 线程池工作...

  • 信号量用法:锁

    用于dubbo线程池满的拒绝策略

  • 线程池-四种拒绝策略总结

    一、线程池的拒绝策略线程池中,有三个重要的参数,决定影响了拒绝策略:corePoolSize - 核心线程数,也即...

网友评论

      本文标题:线程池拒绝策略源码小析

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