以下是栅栏的一个简单例子:
package JavaDay6_02;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* @author myvina@qq.com
* @date 18-6-2 上午10:33
*/
public class Demo4 {
public static class Writer extends Thread {
private final CyclicBarrier cyclicBarrier;
public Writer(CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run() {
try{
Thread.sleep(1000);
System.out.println("线程" + this.getName() + "写入数据完毕,等待其他线程写入...");
cyclicBarrier.await();
System.out.println("线程" + this.getName() + "关闭");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
for(int i = 0; i < 4 ; i++) {
new Writer(cyclicBarrier).start();
}
cyclicBarrier.await();
Thread.sleep(1000);
System.out.println("所有线程写入数据完毕...");
}
}
运行结果为: