Java线程池之WorkStealingPool,任务窃取算法

 1 import java.io.IOException;
 2 import java.util.concurrent.ExecutorService;
 3 import java.util.concurrent.Executors;
 4 import java.util.concurrent.TimeUnit;
 5 
 6 /**
 7  * 任务窃取算法
 8  */
 9 public class WorkStealingPool {
10 
11     public static void main(String[] args) {
12 
13         ExecutorService service = Executors.newWorkStealingPool();
14 
15         System.out.println(Runtime.getRuntime().availableProcessors());
16 
17         service.submit(new R(1)); //精灵线程
18         service.submit(new R(2));
19         service.submit(new R(2));
20         service.submit(new R(2));
21         service.submit(new R(2));
22 
23         try {
24             System.in.read();
25             //由于产生的是精灵线程(守护线程、后台线程),主程序不阻塞的话看不到打印信息
26         } catch (IOException e) {
27             e.printStackTrace();
28         }
29 
30     }
31 
32     static class R implements Runnable {
33 
34         int time;
35 
36         R(int runTime) {
37             this.time = runTime;
38         }
39 
40         @Override
41         public void run() {
42             try {
43                 TimeUnit.SECONDS.sleep(time);
44             } catch (InterruptedException e) {
45                 e.printStackTrace();
46             }
47             System.out.println(time + " " + Thread.currentThread().getName());
48         }
49     }
50 
51 

newWorkStealingPool线程池的实现用到了ForkJoinPool,用到了分而治之,递归计算的算法,
有兴趣的可以查看博客https://www.cnblogs.com/mxh-java/p/12244318.html
posted @ 2020-01-31 19:54  尘世间迷茫的小书童  阅读(2962)  评论(0编辑  收藏  举报