CyclicBarrier提供2个构造器:
//@param parties指让多少个线程或者任务等待至barrier状态;
//@param barrierAction为当这些线程都达到barrier状态时会执行的内
public CyclicBarrier(int parties, Runnable barrierAction) {
}
//@param parties指让多少个线程或者任务等待至barrier状态;
public CyclicBarrier(int parties) {
}
CyclicBarrier中最重要的方法就是await方法:
//挂起当前线程,直至所有线程都到达barrier状态再同时执行后续任务;
public int await() throws InterruptedException, BrokenBarrierException { };
CyclicBarrier这个类,可以用来处理等待事件。比如执行n个进程,处理到某个程度之后,大家相互等待,只要有一个没有完成,其他人都得等着。
下面用一个例子来演示一下:
package com.tgb.thread;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* CyclicBarrier用法
*
* @author sjzc6
*
*/
public class Test_CyclicBarrier {
public static void main(String[] args) {
int N = 3;
CyclicBarrier barrier = new CyclicBarrier(N);
for (int i = 0; i < N; i++)
new Writer(barrier).start();
}
static class Writer extends Thread {
private CyclicBarrier cyclicBarrier;
public Writer(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
public void run() {
try {
System.out.println("学生" + Thread.currentThread().getName() + "达到集合地点,等待发车");
cyclicBarrier.await(); //等待其他同学答题
System.out.println("全部学生已经到位,准备发车");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
}
执行结果: