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


相关推荐

  • C语言学习——sprintf函数详细解释及其用法

    C语言学习——sprintf函数详细解释及其用法sprintf指的是字符串格式化命令,函数声明为 int sprintf(char *string, char *format [,argument,…]);,主要功能是把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。解决这个问题,可以…

    2022年8月18日
    3
  • Server SAN_Windows存储卷设备

    Server SAN_Windows存储卷设备目前,实现云环境中数据的高效存储是云计算提供服务的基本要求。云计算和云存储已经成为提供信息和在线功能的首选方法。云计算和云存储已经成为解决普通IT问题和挑战的热门话题。以数据中心网络为基础的分布式存储是构建云计算的物理实体。通常熟知的存储设备是和计算机主板I/O接口(如IDE、SCSI)相连接的硬盘,由本机操作系统负责读写及管理,这是传统的数据存储技术,称为DAS(直接附加存储)。如果添加网络,可以实现文件共享,这是基于局域网(IP)的文件共享设备,能消除对多个文件服务器的需求。存储作为云计算提供I

    2022年10月28日
    0
  • gb50174-2017电子信息系统机房设计规范发布时间_计算机机房设计标准GB50174

    gb50174-2017电子信息系统机房设计规范发布时间_计算机机房设计标准GB50174中国工程建设标准化协会信息通信专业委员会建标信通字[2009]03号GB50174《电子信息系统机房设计规范》贯标培训通…

    2022年9月28日
    0
  • RELU激活函数作用「建议收藏」

    RELU激活函数作用「建议收藏」梯度消失现象:在某些神经网络中,从后向前看,前面层梯度越来越小,后面的层比前面的层学习速率高。梯度消失原因:sigmoid函数导数图像导数最大为0.25<1权重初始值通常使用一个高斯分布所以|w|<1,所以wjσ′(zj)<0.25,根据链式法则计算梯度越来越小。由于层数的增加,多个项相乘,势必就会导致不稳定的情况。sigmoid激活函数的…

    2022年6月16日
    32
  • org.bson.codecs.configuration.CodecConfigurationException

    org.bson.codecs.configuration.CodecConfigurationException

    2021年6月15日
    79
  • docker常用命令详解

    docker常用命令详解

    2021年6月1日
    79

发表回复

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

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