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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网站备案后 换服务器,网站备案后更换服务器怎么办_域名备案一定要服务器吗

    网站备案后 换服务器,网站备案后更换服务器怎么办_域名备案一定要服务器吗网站备案后更换服务器内容精选换一换通过华为云备案,需要先购买华为云中国大陆节点服务器。目前可用于华为云备案的资源有:ECS:弹性云服务器(含云耀云服务器)需包月3个月及以上(包含多次续费后累计时长),且有“包年/包月”计费模式(包月3个月及以上)的弹性公网IP。一台ECS(含云耀云服务器)最多可以备案5个域名。如何将“按需计费”的ECS切换为“包年/包月”计费模式,请参见如果系统提示“您用于备案…

    2025年8月4日
    3
  • Linux学习教程,Linux入门教程(超详细)

    Linux学习教程,Linux入门教程(超详细)http://c.biancheng.net/linux_tutorial/

    2022年10月13日
    2
  • java queryinterface_JS和C#访问遇到QueryInterface调用出错「建议收藏」

    java queryinterface_JS和C#访问遇到QueryInterface调用出错「建议收藏」在原来的WinForm里,我们只要在窗体类的头部添加属性[System.Runtime.InteropServices.ComVisibleAttribute(true)],然后webBrowser1.ObjectForScripting=this;这样设置完后,页面上的JS就能访问窗体类的方法了,但是添加WeifenLuo.WinFormsUI.Docking.DockContent作为窗…

    2022年6月16日
    26
  • python 自带的word2vec讲解_word2vec训练

    python 自带的word2vec讲解_word2vec训练word2vec理解学习nlp最先了解的概念应该就是词嵌入(wordembedding)吧,Word2vec是谷歌于2013年提出的一种有效的词嵌入的方法,采用了两种模型(CBOW与skip-gram模型)与两种优化方法(负采样与层次softmax方法)的组合。现在使用Word2vec获得词的向量表达,并将其应用于各种nlp任务中已经非常常见。由于我们要用计算机来完成各种自然语言理解的任务,而…

    2025年9月28日
    3
  • 最长递增子序列LIS的O(nlogn)的求法

    最长递增子序列LIS的O(nlogn)的求法最长递增子序列(LongestIncreasingSubsequence)是指n个数的序列的最长单调递增子序列。比如,A=[1,3,6,7,9,4,10,5,6]的LIS是1367910。我们现在希望编程求出一个给定的数组,我们能得到LIS的长度。关于LIS的求法使用DP算法的文章也很多,时间复杂度是O(n2),这里,我们介绍一个只需要不到15行的Python代码或者Java代

    2022年5月1日
    41
  • 词法/语法分析框架 chrysanthemum 简介

    词法/语法分析框架 chrysanthemum 简介

    2021年8月21日
    84

发表回复

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

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