package cn.hc.sort.thread;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/**
* 栅栏实例
* Created by yhc on 2015/5/6.
*/
public class CyclicBarrierTest {
private static class Report implements Runnable{
private final CyclicBarrier barrier;
private final String provinceName;
private Report(CyclicBarrier barrier, String provinceName) {
this.barrier = barrier;
this.provinceName = provinceName;
}
@Override
public void run() {
System.out.println("开始统计"+provinceName+"数据,生成统计数据....");
try {
//TODO 复杂的统计计算操作
Thread.sleep(2000);
System.out.println(provinceName+"统计数据,生成完毕.");
barrier.await();
System.out.println("计算"+provinceName+"数据在全国数据中所占例.");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
CyclicBarrier barrier=new CyclicBarrier(3);
String [] provinceArray=new String[]{"湖北省","湖南省","江西省"};
for (int i = 0; i < provinceArray.length; i++) {
Thread thread=new Thread(new Report(barrier,provinceArray[i]));
thread.start();
}
}
}
开始统计湖北省数据,生成统计数据....
开始统计湖南省数据,生成统计数据....
开始统计江西省数据,生成统计数据....
江西省统计数据,生成完毕.
湖南省统计数据,生成完毕.
湖北省统计数据,生成完毕.
计算湖北省数据在全国数据中所占例.
计算江西省数据在全国数据中所占例.
计算湖南省数据在全国数据中所占例.