本文共 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/