首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java线程池拒绝策略_Java线程池拒绝策略

,就是把这一个任务(Runnable)丢弃,这是因为ThreadPoolExecutor在执行拒绝策略的时候就不会新建线程来执行Runnable,也不会加入任务队列了,所以在拒绝策略中什么都不做就是简单的丢弃掉了任务...拒绝策略与模式 从线程池的拒绝策略实现上也体现了面向对象的思想,把拒绝策略抽象在RejectedExecutionHandler接口中,ThreadPoolExecutor关联(更加具体的来说是聚合aggregation...好歹我们也是学过设计模式的,在设计模式中这种模式叫做策略模式(Strategy),虽然实现类的后缀都是Policy但事实上这确实是一个策略模式的应用。对于不同拒绝算法的封装。可以看一下下面的类图。...自定义拒绝策略 既然设计上使用的是策略模式,那么对于我们来说扩展就是相当容易的事情了,简单来一个例子测试一下扩展线程池的策略模式。...Java线程池拒绝策略使用的是策略模式,抽象在RejectedExecutionHandler,如果需要扩展只需要实现RejectedExecutionHandler接口就可以了。

84730
您找到你想要的搜索结果了吗?
是的
没有找到

线程池的拒绝策略

在说拒绝策略之前,先谈谈这两方法的区别。 什么时候执行拒绝策略? 先看看 submit 的源码:可以看到它最终还是调用 execute 方法。...再次检查状态,若非运行状态,则移除任务并执行拒绝策略;否则,创建线程执行任务。 线程池处于非运行状态或者启动线程执行失败,则执行拒绝策略。...addWorker(command, false)) // 执行拒绝策略 reject(command); } Java 提供的拒绝策略 Java 给我们提供了拒绝策略...拒绝策略.png 逐个聊聊它们的特点: AbortPolicy:线程池默认的拒绝策略(不值当就是它),拒绝任务时,直接抛出一个类型为 RejectedExecutionException 的运行时异常。...总结 本文从源码分析了拒绝策略的执行时机并详细介绍了 Java 提供的四种拒绝策略,相信大家看完会有所收获。选用哪种线程池是根据你自己的业务而定的,实践出真知。

66253

Java ThreadPoolExecutor的拒绝策略

ThreadPoolExecutor自己已经提供了四个拒绝策略,分别是CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy 这四个拒绝策略其实一看实现方法就知道很简单...二、每种拒绝策略 2.1 AbortPolicy ThreadPoolExecutor中默认的拒绝策略就是AbortPolicy。直接抛出异常。...因此采用这个拒绝策略,会让被线程池拒绝的任务直接抛弃,不会抛异常也不会执行。...这时任务队列中有 任务2,任务3 这时,拒绝策略会让任务队列中最先加入的任务弹出,也就是任务2. 然后把被拒绝的任务5添加人任务队列,这时任务队列中就成了 任务3,任务5....2.5 自定义拒绝策略 通过看前面的系统提供的四种拒绝策略可以看出,拒绝策略的实现都非常简单。

75430

线程池拒绝策略详解

线程池拒绝策略详解 JDK中已经预设了4种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景,以及我们还能扩展哪些拒绝策略。 池化设计思想 池话设计应该不是一个新名词。...数据库连接池一般请求的连接数超过连接池的最大值的时候就会触发拒绝策略策略一般是阻塞等待设置的时间或者直接抛异常。而线程池的触发时机如下图: 如图,只有当队列缓冲区满了才会触发拒绝策略。...JDK内置4种线程池拒绝策略 拒绝策略接口定义 public interface RejectedExecutionHandler { void rejectedExecution(Runnable...第三方实现的拒绝策略 dubbo的线程拒绝策略 public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy{...他定义了一个拒绝策略链,包装了一个拒绝策略列表,当触发拒绝策略时,会将策略链中的rejectedExecution依次执行一遍。

86310

线程池的 RejectedExecutionHandler(拒绝策略

其中这些参数的使用和说明在我的一篇文章中已经有了介绍,如果不太清楚的可以参考这篇文章:http://blog.csdn.net/jgteng/article/details/54409887 这里想对拒绝策略...) DiscardOldestPolicy  (抛弃最旧)  CallerRunsPolicy (调用者运行) 自定义 ◇AbortPolicy 该策略是线程池的默认策略。...如果工作队列是一个优先队列,那么抛弃最旧的策略,会抛弃优先级最高的任务,因此最好不要将抛弃最旧的饱和策略和优先级队列放在一起使用。...,那么可以自己定义一个拒绝策略,只要实现RejectedExecutionHandler接口,并且实现rejectedExecution方法就可以了。...例如:我定义了我的一个拒绝策略,叫做MyRejectPolicy,里面的逻辑就是打印处理被拒绝的任务内容 public class MyRejectPolicy implements RejectedExecutionHandler

1.3K10

四种线程池拒绝策略

但是,线程池的拒绝策略,相信知道的人会少许多。...二、四种线程池拒绝策略 当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略: ThreadPoolExecutor.AbortPolicy...(提交任务的线程)处理该任务 三、线程池默认的拒绝策略 既然有四种拒绝策略可以选择,那么线程池的默认拒绝策略是什么呢?...4、RejectedExecutionHandler handler拒绝策略,超过最大核心线程,线程等待队列已满的时候,会执行拒绝策略。...此拒绝策略,是一种喜新厌旧的拒绝策略。是否要采用此种拒绝策略,还得根据实际业务是否允许丢弃老任务来认真衡量。

99620
领券