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


相关推荐

  • 网站ssl证书申请_证书注册需要什么材料

    网站ssl证书申请_证书注册需要什么材料HTTPS是指网站在地址栏显示的加密协议,这个协议称作为HTTPS,但实现HTTPS必须要用HTTPS证书才可以,这就告诉大家任何申请HTTPS证书。申请HTTPS方法1、HTTPS证书申请之前我们需要准备:域名、邮箱(用于接收证书)。2、然后将域名确定后提交至Gworg进行申请。3、根据要求完成域名认证,可选认证方式DNS解析、文件认证、邮箱。4、大约十几分钟就可以获得SSL证书文件。5、配置到指定的服务器或者CDN等产品。6、HTTPS证书只需几分钟就可以完成。如果对申请

    2022年10月1日
    3
  • Android开发之《Android应用开发揭秘》UI事件汇总

    Android开发之《Android应用开发揭秘》UI事件汇总Android开发之《Android应用开发揭秘》UI事件汇总/* * Android开发之《Android应用开发揭秘》UI事件汇总 * 北京Android俱乐部群:167839253 * Createdon:2011-12-01 * Author:blueeagle * Email:liujiaxiang@gmail.com */思想跑毛是很可

    2022年4月28日
    60
  • 深度学习简介(一)——卷积神经网络「建议收藏」

    深度学习简介(一)——卷积神经网络「建议收藏」本文的主要目的,是简单介绍时下流行的深度学习算法的基础知识,本人也看过许多其他教程,感觉其中大部分讲的还是太过深奥,于是便有了写一篇科普文的想法。博主也是现学现卖,文中如有不当之处,请各位指出,共同进

    2022年8月3日
    7
  • jprofiler监控jvm_怎么检测jps

    jprofiler监控jvm_怎么检测jps很多人在学习java的时候只是对java粗略的学了一遍,很少有人能了解jvm层面的一些东西,比如我们想看目前有多少个java进程,可以在命令行执行jps。下面我们来说说jps的一些详细的用法。jps输出正字运行的相关进程信息jps-v输出传递给jvm参数jps-l输出模块名以及包名,如果是jar则出输jar文件全名jps-m输出传递给jvm参数jps-mlv输出进程号,包名,虚拟…

    2022年9月2日
    7
  • AutoreleasePool的那些事

    AutoreleasePool的那些事

    2021年6月6日
    131
  • CSS选择器及优先级 总结

    CSS选择器及优先级 总结一、优先级不同级别在属性后面使用!important会覆盖页面内任何位置定义的元素样式。作为style属性写在元素内的样式id选择器类选择器元素选择器通配符选择器浏览器自定义或继承总结排序:!important>行内样式>ID选择器>类选择器>元素>通配符>继承&a

    2022年7月27日
    6

发表回复

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

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