博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程:执行器:1、添加拒绝策略(RejectedExecutionHandler )
阅读量:2346 次
发布时间:2019-05-10

本文共 5998 字,大约阅读时间需要 19 分钟。

目录


一、主程序

package xyz.jangle.thread.test.n4_2.rejectedexecutionhandler;import java.util.concurrent.TimeUnit;/** * 4.2 創建一個綫程執行器並實現其拒絕策略 *  * @author jangle * @email jangle@jangle.xyz * @time 2020年8月17日 下午3:54:48 *  */public class M {	public static void main(String[] args) {		Server server = new Server();		System.out.println("Main:開始...");		for (int i = 0; i < 20; i++) {			Task task = new Task("Task" + i);			server.executeTask(task);		}		try {			TimeUnit.SECONDS.sleep(2);		} catch (InterruptedException e) {			e.printStackTrace();		}		System.out.println("Main:停止執行器Executor.");		server.endServer();		System.out.println("Main:添加另外的任務");		for (int i = 0; i < 10; i++) {			Task task = new Task("將被拒絕的任務"+i);			server.executeTask(task);		}		System.out.println("Main:結束");	}}

二、拒绝策略句柄

package xyz.jangle.thread.test.n4_2.rejectedexecutionhandler;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;/** * 	拒绝策略句柄 * @author jangle * @email jangle@jangle.xyz * @time 2020年8月17日 下午4:03:18 *  */public class RejectedTaskHandler implements RejectedExecutionHandler {	@Override	public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {		System.out.println("Rejected:runnable:" + r.toString() + "被拒絕");		System.out.println("Rejected:executor:" + executor.toString());		System.out.println("Rejected:Terminating:" + executor.isTerminating());		System.out.println("Rejected:Terminated:" + executor.isTerminated());	}}

三、普通的任务实现

package xyz.jangle.thread.test.n4_2.rejectedexecutionhandler;/** * 	普通的任務綫程 * @author jangle * @email jangle@jangle.xyz * @time 2020年8月17日 下午3:55:52 *  */import java.util.Date;import java.util.concurrent.TimeUnit;public class Task implements Runnable {	private final Date initDate;	private final String name;	public Task(String name) {		super();		this.initDate = new Date();		this.name = name;	}	@Override	public void run() {		System.out.println(Thread.currentThread().getName() + ",創建時間:" + initDate);		System.out.println(Thread.currentThread().getName() + ",執行時間:" + new Date());		try {			TimeUnit.SECONDS.sleep((long) (Math.random() * 10));		} catch (InterruptedException e) {			e.printStackTrace();		}		System.out.println(Thread.currentThread().getName() + ",任務" + name + ",完成時間" + new Date());	}	public String getName() {		return name;	}}

四、线程执行器的包装

package xyz.jangle.thread.test.n4_2.rejectedexecutionhandler;/** * 	執行器包裝類 * @author jangle * @email jangle@jangle.xyz * @time 2020年8月17日 下午4:08:45 *  */import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;public class Server {	private final ThreadPoolExecutor executor;	public Server() {		super();		System.out.println(Runtime.getRuntime().availableProcessors());		this.executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());		RejectedTaskHandler handler = new RejectedTaskHandler();		this.executor.setRejectedExecutionHandler(handler);	}	/**	 * 用於接收任務	 * 	 * @author jangle	 * @time 2020年8月17日 下午4:14:49	 * @param task 任務	 */	public void executeTask(Task task) {		System.out.println("Server:一个新的任务达到"+task.getName());		executor.execute(task);		//当前线程数 随着任务增加而增加,不超过maximumPoolSize,即最大值8		System.out.println("Server:PoolSize:" + executor.getPoolSize());		//线程的核心数 ((保持活动状态的最小工作线程数)		System.out.println("Server:CorePoolSize:" + executor.getCorePoolSize());		//同时存在于池中的最大线程数。(记录PoolSize的最大值)		System.out.println("Server:LargestPoolSize:" + executor.getLargestPoolSize());		//最大线程数(保持活动状态的最大工作线程数)		System.out.println("Server:MaximumPoolSize:" + executor.getMaximumPoolSize());		//计划执行的任务总数大概值(因为任务在一直添加,会变动)		System.out.println("Server:TaskCount:" + executor.getTaskCount());		//当前活动线程的大概值(因为活动线程数是变动的,但值不超過PoolSize )		System.out.println("Server:ActiveCount:" + executor.getActiveCount());		//已完成的任务数(这是个近似值,但只增不减)		System.out.println("Server:CompletedTasks:" + executor.getCompletedTaskCount());	}	public void endServer() {		System.out.println("开始停止");		executor.shutdown();	}}

五、执行结果

8Main:開始...Server:一个新的任务达到Task0Server:PoolSize:1Server:CorePoolSize:8Server:LargestPoolSize:1Server:MaximumPoolSize:8Server:TaskCount:1Server:ActiveCount:1Server:CompletedTasks:0Server:一个新的任务达到Task1Server:PoolSize:2Server:CorePoolSize:8Server:LargestPoolSize:2Server:MaximumPoolSize:8Server:TaskCount:2Server:ActiveCount:2Server:CompletedTasks:0Server:一个新的任务达到Task2Server:PoolSize:3Server:CorePoolSize:8Server:LargestPoolSize:3Server:MaximumPoolSize:8Server:TaskCount:3Server:ActiveCount:3Server:CompletedTasks:0Server:一个新的任务达到Task3Server:PoolSize:4Server:CorePoolSize:8Server:LargestPoolSize:4Server:MaximumPoolSize:8Server:TaskCount:4Server:ActiveCount:4Server:CompletedTasks:0Server:一个新的任务达到Task4Server:PoolSize:5Server:CorePoolSize:8Server:LargestPoolSize:5Server:MaximumPoolSize:8Server:TaskCount:5Server:ActiveCount:5Server:CompletedTasks:0Server:一个新的任务达到Task5Server:PoolSize:6Server:CorePoolSize:8Server:LargestPoolSize:6Server:MaximumPoolSize:8Server:TaskCount:6Server:ActiveCount:6Server:CompletedTasks:0Server:一个新的任务达到Task6Server:PoolSize:7Server:CorePoolSize:8Server:LargestPoolSize:7Server:MaximumPoolSize:8Server:TaskCount:7Server:ActiveCount:7Server:CompletedTasks:0Server:一个新的任务达到Task7Server:PoolSize:8Server:CorePoolSize:8Server:LargestPoolSize:8Server:MaximumPoolSize:8Server:TaskCount:8Server:ActiveCount:8Server:CompletedTasks:0Server:一个新的任务达到Task8Server:PoolSize:8Server:CorePoolSize:8Server:LargestPoolSize:8Server:MaximumPoolSize:8Server:TaskCount:9Server:ActiveCount:8Server:CompletedTasks:0

被拒绝的任务:

Main:添加另外的任務Server:一个新的任务达到將被拒絕的任務0Rejected:runnable:xyz.jangle.thread.test.n4_2.rejectedexecutionhandler.Task@67f89fa3被拒絕Rejected:executor:java.util.concurrent.ThreadPoolExecutor@4ac68d3e[Shutting down, pool size = 8, active threads = 8, queued tasks = 11, completed tasks = 1]Rejected:Terminating:trueRejected:Terminated:falseServer:PoolSize:8Server:CorePoolSize:8Server:LargestPoolSize:8Server:MaximumPoolSize:8Server:TaskCount:20Server:ActiveCount:8Server:CompletedTasks:1

 

转载地址:http://ybsvb.baihongyu.com/

你可能感兴趣的文章
ASP.NET MVC3、Pager 分页
查看>>
在 ASP.NET MVC 中创建自定义 HtmlHelper 控件
查看>>
MSDN---扩展方法 (C# 方法中的this参数)
查看>>
我要学ASP.NET MVC 3.0(十四): MVC 3.0 实例系列之创建数据表格
查看>>
我要学ASP.NET MVC 3.0(十五): MVC 3.0 实例系列之表格的排序
查看>>
我要学ASP.NET MVC 3.0(十七): MVC 3.0 实例之表格中数据的筛选
查看>>
Displaying a Sorted, Paged, and Filtered Grid of Data in ASP.NET MVC
查看>>
C#中的操作符
查看>>
ADO.NET Ling to Sql 语法
查看>>
ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
查看>>
详解Asp.net MVC DropDownLists
查看>>
Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
查看>>
VS2010的智能提示没有了的可能原因
查看>>
Creating a Cascading Dropdown in ASP.net MVC 3 and jQuery (1)
查看>>
创建联动的 DropdownList in ASP.net MVC 3 and jQuery (2)
查看>>
HTTP触发Jenkins参数化构建(CORS Plugin)
查看>>
来自 Serenity 的 Java 8 的一些使用技巧
查看>>
ubuntu12.04--子进程 已安装 post-installation 脚本 返回了错误号 1
查看>>
系统--电脑开机一声长响
查看>>
系统--A disk read error occurred Press Ctrl+Alt+d...
查看>>