并发编程--线程池拒绝策略RejectedExecutionHandler(三)
来源:互联网 发布:java需求分析 编辑:程序博客网 时间:2024/05/29 08:22
线程池的拒绝策略,是指当任务添加到线程池中被拒绝,而采取的处理措施。
当任务添加到线程池中之所以被拒绝,可能是由于:第一,线程池异常关闭。第二,任务数量超过线程池的最大限制。
线程池共包括4种拒绝策略,它们分别是:AbortPolicy, CallerRunsPolicy, DiscardOldestPolicy和DiscardPolicy。
ThreadPoolExecutor默认的拒绝策略是AbortPolicy
private static final RejectedExecutionHandler defaultHandler = new AbortPolicy();ThreadPoolExecutor通过regect方法来执行拒绝策略
final void reject(Runnable command) { handler.rejectedExecution(command, this); }DiscardPolicy:直接丢弃要执行的任务
public static class DiscardPolicy implements RejectedExecutionHandler { public DiscardPolicy() { }//当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { } }AbortPolicy:直接抛出异常
public static class AbortPolicy implements RejectedExecutionHandler { public AbortPolicy() { }//直接抛出异常 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString()); } }CallerRunsPolicy :线程池满则直接执行当前任务
public static class CallerRunsPolicy implements RejectedExecutionHandler { public CallerRunsPolicy() { } //如果线程池没有关闭则直接执行线程 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { r.run(); } } }DiscardOldestPolicy :当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
public static class DiscardOldestPolicy implements RejectedExecutionHandler { public DiscardOldestPolicy() { } //当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { e.getQueue().poll(); e.execute(r); } } }
总结:通过模板模式提供RejectedExecutionHandler的不同实现类,这样根据不同的实现类来达到不同的拒绝策略。
阅读全文
0 0
- 并发编程--线程池拒绝策略RejectedExecutionHandler(三)
- 线程池的RejectedExecutionHandler(拒绝策略)
- Java 线程池 拒绝策略 RejectedExecutionHandler介绍
- Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用示例
- java多线程-ThreadPoolExecutor的拒绝策略RejectedExecutionHandler
- Java并发编程——线程池的使用(二) 手动创建线程池以及线程池的拒绝策略
- 线程池拒绝策略
- 线程池之拒绝策略
- Java 并发编程之线程池的使用 (三)
- Java 并发编程之线程池的使用 (三)
- Java 并发编程(三)线程管理
- 线程池.(Executors,ThreadPoolExecutor,BlockingQueue,RejectedExecutionHandler).介绍
- 线程池的生命周期和拒绝策略
- 《Java线程池》:任务拒绝策略
- Java自定义拒绝策略与线程池
- 自定义JAVA线程池拒绝策略
- 并发编程(三)-线程协作
- java并发编程(三)-守护线程、线程工厂
- Spark中cache和persist的作用以及存储级别
- 重载比较函数 的用法
- ThinkPHP5 批量注册路由
- 11149 Power of Matrix(矩阵快速幂)
- 停车管理C语言站和队列
- 并发编程--线程池拒绝策略RejectedExecutionHandler(三)
- 个人编程心得
- J
- VS2013+opecv 2.4.9 配置
- Android OTA升级原理和流程分析(一)
- Nginx解决惊群现象
- 常见布局&控件——下拉按钮
- opencv输出中文字符,并控制字符大小
- request请求https时禁用安全请求警告