CyclicBarrier, 同步辅助类
它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
使用场景:假设要进行一个大量的计算,得到最终的值。如果使用单线程会很慢,使用多线程,又不知道最终什么时候把结果合并,这个使用 CyclicBarrier 就很有用了。
样例如下
package com.thread;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Cylic {
public static int a = 0;
public static int b = 0;
public static int c = 0;
public static void main(String[] args) {
CyclicBarrier cy = new CyclicBarrier(3, new Runnable() {
@Override
public void run() {
System.out.println("并行计算结果完成,计算总结果");
System.out.println(a+b+c);
}
});
new Thread(new JobRun(1, cy)).start();
new Thread(new JobRun(2, cy)).start();
new Thread(new JobRun(3, cy)).start();
}
}
class JobRun implements Runnable{
CyclicBarrier c;
int i;
JobRun(int i,CyclicBarrier c){
this.i = i;
this.c = c;
}
@Override
public void run() {
System.out.println("计算出第"+i+"的值");
if(i == 1) {
Cylic.a = 1;
}else if(i == 2) {
Cylic.b = 1;
}else if(i == 3) {
Cylic.c = 1;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
c.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}