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工具网噢。

推荐阅读:

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Scrapy常用命令建议收藏

    scrapy全局命令要想了解在scrapy中由哪些全局命令,可以在不进入scrapy爬虫项目目录的情况下运行scrapy-h(1)fetch命令fetch命令主要用来显示爬虫爬取的过程,如果

    2021年12月19日
  • pycharm设置壁纸_pycharm界面开发

    pycharm设置壁纸_pycharm界面开发一:打开pycharm,按两次shift输入setbackgroundimage或者用快捷键Ctrl+shift+A二:选择setbackgroundimage进入如下界面第一处的箭头是背景图片的路径,第二个是透明度。选完图片之后点击ok就可以看到效果啦!三:最终效果ps:提升一下敲代码的big,哈哈!…

  • 互联网协议

    互联网协议

    2021年10月10日
  • Python安装管理 Pycharm安装使用 pip使用[通俗易懂]

    Python安装管理 Pycharm安装使用 pip使用[通俗易懂]一、Python环境管理(mac系统)1、安装:  下载python安装包:https://www.python.org/  Python安装文档(windwos系统):https://testing-studio.com/t/topic/57/42、查看安装结果终端中输入python(对于Mac和Linux系统会本身自带一个较低的Python版本)  mac系统的安装Python的默认路径是:/usr/local/bin/python3.8  设置软链接ln-f/usr/

  • 一步步入门log4cpp

    一步步入门log4cpp前言项目实现过程中,需要检查、查找或者调试程序bug等,此时程序日志则较为清晰地展现代码的运行过程。目前接触到的方法有打印消息到控制台,将重要信息输出到某个文件比如txt文件,或者直接使用日志库。

  • java运行class文件找不到主类_beanutils工具类中copyProperties

    java运行class文件找不到主类_beanutils工具类中copyProperties我们打包成功,但是遇到jar中没有主清单属性的错误,解决办法如下:把我们原先的这段代码<!–这个插件,可以将应用打包成一个可执行的jar包–><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin&l

发表回复

您的电子邮箱地址不会被公开。

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