自定義線程池以及拒絕執行策略


 1 package com.duchong.demo.demox.hutool.threadpool;
 2 
 3 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 4 
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 import java.util.concurrent.LinkedBlockingQueue;
 8 import java.util.concurrent.ThreadFactory;
 9 import java.util.concurrent.ThreadPoolExecutor;
10 import java.util.concurrent.TimeUnit;
11 
12 /**
13  * 自定義線程池
14  * @author DUCHONG
15  * @since 2019-09-04 9:54
16  **/
17 public class DiyThreadPool {
18 
19     private static int maxNum=30;
20 
21     public static void main(String[] args)throws Exception {
22         //被拒絕執行的任務Runnable集合
23         List<Runnable> rejectTask=new ArrayList<>();
24         //設置預先創建線程的名稱格式
25         ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("DiyThreadPool-%s").build();
26         ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(2,5,10, TimeUnit.SECONDS, new LinkedBlockingQueue <Runnable> (10) ,threadFactory,
27                 (r,executor)->{
28                 //把拒絕的任務記錄日志,然后空閑時間解析再重新執行
29                 System.out.println("當前被拒絕任務為:" + r.toString());
30                 System.out.println("當前線程池大小為:"+executor.getPoolSize());
31 
32                 rejectTask.add(r);
33             }
34         );
35 
36         for (int i=1;i<=maxNum;i++){
37             poolExecutor.execute(new Task("task---"+i));
38         }
39 
40         poolExecutor.shutdown();
41 
42         System.out.println("需要繼續執行的任務列表:");
43         rejectTask.forEach(System.out::println);
44     }
45 
46 
47     /**
48      * 內部task線程類
49      */
50     static class Task extends Thread{
51 
52         String taskName;
53         Task(String taskName){
54             super(taskName);
55             this.taskName=taskName;
56         }
57 
58         @Override
59         public void run() {
60 
61             System.out.println(Thread.currentThread().getName()+"----執行任務---"+taskName);
62         }
63     }
64 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM