1 public class TestCyclicBarrier {
2
3 private static final int THREAD_NUM = 5;
4
5 public static class WorkerThread implements Runnable{
6
7 CyclicBarrier barrier;
8
9 public WorkerThread(CyclicBarrier b){
10 this.barrier = b;
11 }
12
13 @Override
14 public void run() {
15 // TODO Auto-generated method stub
16 try{
17 System.out.println("Worker's waiting");
18 //线程在这里等待,直到所有线程都到达barrier。
19 barrier.await();
20 System.out.println("ID:"+Thread.currentThread().getId()+" Working");
21 }catch(Exception e){
22 e.printStackTrace();
23 }
24 }
25
26 }
27
28 /**
29 * @param args
30 */
31 public static void main(String[] args) {
32 // TODO Auto-generated method stub
33 CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
34 //当所有线程到达barrier时执行
35 @Override
36 public void run() {
37 // TODO Auto-generated method stub
38 System.out.println("Inside Barrier");
39
40 }
41 });
42
43 for(int i=0;i
44 new Thread(new WorkerThread(cb)).start();
45 }
46 }
47
48 }
49 /*
50 以下是输出:
51 Worker's waiting
52 Worker's waiting
53 Worker's waiting
54 Worker's waiting
55 Worker's waiting
56 Inside Barrier
57 ID:12 Working
58 ID:8 Working
59 ID:11 Working
60 ID:9 Working
61 ID:10 Working
62 */