写点什么

Java 线程池执行器的饱和策略

作者:Janwee
  • 2023-03-14
    四川
  • 本文字数:573 字

    阅读完需:约 2 分钟

通过传递一个 RejectedExecutionHandler 类的实例给执行器的构造器,我们可以修改 Java 中线程池执行器的饱和策略。

中止策略(Abort Policy)

中止策略是线程池的默认策略。中止策略使执行器抛出一个 RejectedExecutionException 异常。


JDK 1.8 中的源码如下:


public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {    throw new RejectedExecutionException("Task " + r.toString() +                                         " rejected from " +                                         e.toString());}
复制代码

调度者运行策略(Caller-Runs Policy)

该策略使调度者线程自己执行该任务。


JDK 1.8 中的源码如下:


public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {    if (!e.isShutdown()) {        r.run();    }}
复制代码

丢弃策略(Discard Policy)

该策略在新任务提交失败时静默地丢弃新任务。


JDK 1.8 中的源码如下:


public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {}
复制代码

丢弃最老任务策略(Discard-Oldest Policy)

该策略先删除队列头中的任务,再重新提交新任务。


JDK 1.8 中的源码如下:


public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {    if (!e.isShutdown()) {        e.getQueue().poll();        e.execute(r);    }}
复制代码


这里的代码展示了四种策略的行为。


发布于: 刚刚阅读数: 3
用户头像

Janwee

关注

Life isn't a problem to solve. 2020-07-26 加入

软件工程师,高质量编码实践者。

评论

发布
暂无评论
Java线程池执行器的饱和策略_线程池_Janwee_InfoQ写作社区