java线程池拒绝策略_java线程池拒绝策略有哪些?

java线程池拒绝策略_java线程池拒绝策略有哪些?小伙伴们知道java中线程池拒绝策略有哪些吗?这是java线程池必须知道的基础之一,下面就一起来看看吧。在java线程池中,有着这么四种拒绝策略:1)、AbortPolicy(默认)直接抛出RejectedExecutionException异常阻止系统正常运行。publicstaticclassAbortPolicyimplementsRejectedExecutionHandler{…

大家好,又见面了,我是你们的朋友全栈君。

小伙伴们知道java中线程池拒绝策略有哪些吗?这是java线程池必须知道的基础之一,下面就一起来看看吧。

在java线程池中,有着这么四种拒绝策略:

1)、AbortPolicy(默认)

直接抛出RejectedExecutionException异常阻止系统正常运行。public static class AbortPolicy implements RejectedExecutionHandler

{

public void rejectedExecution(Runnable r, ThreadPoolExecutor e)

{

throw new RejectedExecutionException(“Task ” + r.toString() +

” rejected from ” +

e.toString());

}

}

2)、CallerRunsPolicy

“调用者运行”一种调节机制,该策略既不会丢弃任务,也不会抛出异常,而是将某些任务回退给调用者,从而降低新任务的流量。public static class CallerRunsPolicy implements RejectedExecutionHandler

{

public void rejectedExecution(Runnable r, ThreadPoolExecutor e)

{

if (!e.isShutdown())

{

r.run();

}

}

}

3)、DiscardOldestPolicy

抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务。public static class DiscardOldestPolicy implements RejectedExecutionHandler

{

public void rejectedExecution(Runnable r, ThreadPoolExecutor e)

{

if (!e.isShutdown())

{

e.getQueue()

.poll();

e.execute(r);

}

}

}

这里 e.getQueue() 是获得待执行的任务队列,也就是前面提到的待业队列。

因为是队列,所以是先进先出的,一个poll()方法就能直接把队列中最老的抛弃掉,再次尝试执行execute(r)。

这个队列在线程池定义的时候就能看到,是一个阻塞队列/**

* The queue used for holding tasks and handing off to worker

* threads.  We do not require that workQueue.

*/

private final BlockingQueue  workQueue;

public BlockingQueue  getQueue()

{

return workQueue;

}

4)、DiscardPolicy

直接丢弃任务,不予任何处理也不抛出异常。如果允许任务丢失,这是最好的一种方案。public static class DiscardPolicy implements RejectedExecutionHandler

{

public void rejectedExecution(Runnable r, ThreadPoolExecutor e)

{}

}

以上就是关于java线程池拒绝策略的所有内容了,你应该都理解了吧,如果还需要了解更多java常见问题及答案就请一定记得关注奇Q工具网噢。

推荐阅读:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149980.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月17日 下午5:16
下一篇 2022年6月17日 下午5:16


相关推荐

  • 实战elk搭建

    实战elk搭建一 ELK 分析对于 ELK 主要是分为 ElasticSearc Logstash 和 Kibana 三部分 其中 Logstash 作为日志的汇聚 可以通过 input filter output 三部分 把日志收集 过滤 输出到 ElasticSearc 中 也可以输出到文件或其他载体 ElasticSearc 作为开源的分布式引擎 提供了搜集 分析 存储数据的功能 采用的是 restful 接口的风格 Kibana 则是作为 ElasticSearc 分析数据的页面展示 可以进行对日志的分析 汇总

    2026年3月26日
    2
  • WOW.js – 让页面滚动更有趣

    WOW.js – 让页面滚动更有趣

    2021年9月23日
    46
  • win32中SetCapture 和 ReleaseCapture的使用

    win32中SetCapture 和 ReleaseCapture的使用     最近在用win32写《visualC++经典游戏程序设计》中的扫雷游戏,在写到鼠标点击雷区的时候用到了SetCapture,和ReleaseCapture这对系统函数。那么为什么需要用到鼠标捕获的函数呢?我错误地认为鼠标的跟踪可以由Point进行传值处理,就能实现我想要的功能,但是我却疏忽了如果我的鼠标按下的时候把鼠标移除窗口外面的情况,这种情况的时候鼠标是在外面的,那么当我把鼠标弹起的时候鼠标的位置就不在扫雷窗口里面了,因此我需要在按下鼠标的时候捕获鼠标的位置,这样就解决了鼠标不在窗口里面的

    2022年6月6日
    35
  • Mysql 计算时间间隔函数

    Mysql 计算时间间隔函数

    2021年12月3日
    38
  • AIGC入门-小白也能看懂的AI图像生成指南:从原理到实战

    AIGC入门-小白也能看懂的AI图像生成指南:从原理到实战

    2026年3月15日
    4
  • graduation和completion_guides和maven区别

    graduation和completion_guides和maven区别参考:androidgradle依赖:implementation和compile的区别2017年google后,Androidstudio版本更新至3.0,更新中,连带着com.android.tools.build:gradle工具也升级到了3.0.0,在3.0.0中使用了最新的Gralde4.0里程碑版本作为gradle的编译版本,该版本gradle编译速度有所加速,更加……

    2025年7月24日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号