Java并发编程-22-处理在执行器中被拒绝的任务
来源:互联网 发布:js onload是什么事件 编辑:程序博客网 时间:2024/06/16 08:25
一、被拒绝的任务
1、当我们想结束执行器的执行时,调用shutDown()方法
2、但是,执行器只有等待正在运行的任务或者等待执行任务结束之后,才能真正结束
3、如果在执行器shutDown()之后,发送一个任务给执行器,这个任务会被拒绝
二、RejectedExecutionHandler接口
这个接口只有一个方法
void rejectedExecution(Runnable r, ThreadPoolExecutor executor);
三、测试代码
package com.concurrency.executor;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;/** * 实现RejectedExecutionHandler接口 * @author Nicholas * *实现rejectedExecution方法 */public class RejectedTaskController implements RejectedExecutionHandler {/** * 打印被拒绝的任务的名称和状态 */@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.printf("RejectedTaskController : The Task %s has been rejected\n",r.toString());System.out.printf("RejectedTaskController : The status of the executor is %s\n",executor.toString());System.out.printf("RejectedTaskController : Terminating %s\n",executor.isTerminating());System.out.printf("RejectedTaskController : Terminated %s\n",executor.isTerminated());}}package com.concurrency.executor;import java.util.concurrent.TimeUnit;public class Task implements Runnable {private String name;public Task(String name) {this.name = name;}@Overridepublic void run() {System.out.println("Task " + name + ": Starting");try {long duration = (long) (Math.random() * 10);System.out.printf("Task %s : ReportGenerator : Generating a report during %d seconds\n",name, duration);TimeUnit.SECONDS.sleep(duration);} catch (InterruptedException e) {e.printStackTrace();}System.out.printf("Task %s : Ending \n", name);}@Overridepublic String toString() {return name;}}package com.concurrency.executor;import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;public class Main {public static void main(String[] args) {RejectedTaskController rejectedTaskController = new RejectedTaskController();ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newCachedThreadPool();//设置rejectedTaskController对象来管理被拒绝的任务threadPoolExecutor.setRejectedExecutionHandler(rejectedTaskController);System.out.println("Main : starting \n");for (int i = 0; i < 3; i++) {Task task = new Task("Task -- " + i);threadPoolExecutor.submit(task);}System.out.println("Main : Shutting down the threadPoolExecutor");threadPoolExecutor.shutdown();//设置用于被拒绝的任务的处理System.out.println("Sending another Task...");Task task = new Task("RejectedTask");threadPoolExecutor.submit(task);System.out.println("Main : End");}}
打印的结果:Main : starting Main : Shutting down the threadPoolExecutorTask Task -- 0: StartingSending another Task...RejectedTaskController : The Task java.util.concurrent.FutureTask@5c647e05 has been rejectedTask Task -- 0 : ReportGenerator : Generating a report during 7 secondsTask Task -- 2: StartingTask Task -- 2 : ReportGenerator : Generating a report during 5 secondsTask Task -- 1: StartingRejectedTaskController : The status of the executor is java.util.concurrent.ThreadPoolExecutor@1540e19d[Shutting down, pool size = 3, active threads = 3, queued tasks = 0, completed tasks = 0]Task Task -- 1 : ReportGenerator : Generating a report during 2 secondsRejectedTaskController : Terminating trueRejectedTaskController : Terminated falseMain : EndTask Task -- 1 : Ending Task Task -- 2 : Ending Task Task -- 0 : Ending
0 0
- Java并发编程-22-处理在执行器中被拒绝的任务
- [笔记][Java7并发编程实战手册]4.11-4.12在执行器中分离任务的启动和结果的处理和处理在执行器中被拒绝的任务
- 处理在执行器中被拒绝的任务
- Java并发编程-21-在执行器中分离任务的启动与结果的处理
- Java并发编程-18-在执行器中执行任务并处理结果
- Java并发编程-20-在执行器中取消任务和控制任务的完成
- 并发编程--在执行器中分离任务的启动与结果的处理
- Java并发编程-19-在执行器中延时执行任务和周期性执行任务
- 并发编程--在执行器中控制任务的完成
- Java 并发编程之任务执行
- java并发编程(五)任务执行
- Java并发编程实战:任务执行
- java并发编程实践_06任务执行
- java并发编程实战-任务执行
- Java并发编程:ScheduledExecutorService执行周期任务
- Java并发编程-17-在执行器中执行任务并返回结果
- 并发编程--在执行器中延迟执行任务
- 并发编程--在执行器中周期性执行任务
- Java导出CSV文件实例程序
- Linux下启动Oracle服务和监听程序
- maven插件开发简介
- POST对URL中末尾斜杠的差异
- 推荐系统评测标准TOPN之precision与recall
- Java并发编程-22-处理在执行器中被拒绝的任务
- 正则常用
- IOS开发--iOS核心动画
- Catch That Cow
- 利用Dumpsys做系统诊断
- 黑马程序员------java语言基础
- C primer plus(第五版)编程练习第十五章
- 每天一个linux命令(50):crontab命令
- uva 122