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 }