CyclicBarrier
CyclicBarrier并发工具类的作用类是让一组线程到达一个屏障,就是同步点时被阻塞,直到最后一个线程到达屏障是才会开始执行后面的代码,所有之前被拦截的线程才会被执行
package com.concurrent;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* @author 邓亚非
* 同步屏障工具类
*/
public class Writer extends Thread{
private CyclicBarrier cyclicBarrier;
public Writer(CyclicBarrier cyclicBarrier){
this.cyclicBarrier=cyclicBarrier;
}
@Override
public void run() {
System.out.println("线程"+Thread.currentThread().getName()+"正在写入数据");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程"+Thread.currentThread().getName()+"写入数据成功");
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("所有线程执行完毕");
}
}
看一下await源码,返回值为int类型
点进去,返回值为int类型
测试代码
package com.concurrent;
import java.util.concurrent.CyclicBarrier;
/**
* @author 邓亚非
*/
public class TestCyclicBarrier {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier=new CyclicBarrier(2);
for (int i = 0; i <5 ; i++) {
Writer writer=new Writer(cyclicBarrier);
writer.start();
}
}
}
测试结果