多线程之CyclicBarrier

 1 package com.example.demo02.thread;
 2 
 3 import java.io.Writer;
 4 import java.util.concurrent.CyclicBarrier;
 5 
 6 public class ThreadDemo05 {
 7 
 8     static class Write extends Thread {
 9 
10         /**
11          * CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。
12          * CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。
13          * CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
14          */
15         private CyclicBarrier cyclicBarrier;
16 
17         Write(CyclicBarrier cyclicBarrier) {
18             this.cyclicBarrier = cyclicBarrier;
19         }
20 
21         @Override
22         public void run() {
23             System.out.println("线程" + Thread.currentThread().getName() + ",正在写入数据");
24             try {
25                 Thread.sleep(3000);
26             } catch (Exception e) {
27                 e.printStackTrace();
28             }
29             System.out.println("线程" + Thread.currentThread().getName() + ",写入数据成功.....");
30 
31 
32             try {
33                 cyclicBarrier.await();
34                 System.out.println("线程" + Thread.currentThread().getName() + "执行完毕..........");
35             } catch (Exception e) {
36                 e.printStackTrace();
37             }
38 
39 
40         }
41     }
42 
43     public static void main(String[] args) {
44         CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
45         for (int i = 0; i < 6; i++) {
46             Write write = new Write(cyclicBarrier);
47             write.start();
48         }
49 
50     }
51 }

 

posted on 2018-10-26 22:16  jovelove  阅读(126)  评论(0)    收藏  举报