JAVA并发编程实践 83页
栅栏与闭锁不同的是,栅栏可以重复使用。
-
import java.util.concurrent.BrokenBarrierException;
-
import java.util.concurrent.CyclicBarrier;
-
-
public class Test {
-
// 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)
-
final CyclicBarrier barrier;
-
-
// 线程数
-
int count;
-
-
class Worker implements Runnable {
-
int index;
-
-
Worker(int index) {
-
this.index = index;
-
}
-
-
public void run() {
-
System.out.println("第" + index + "个线程休眠" + (2 * index) + "秒!");
-
try {
-
Thread.sleep(2000 * index);
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
}
-
System.out.println("第" + index + "个线程结束休眠!");
-
-
try {
-
// 等待其它线程都处理完毕后,再继续以下代码的执行
-
barrier.await();
-
} catch (InterruptedException e) {
-
e.printStackTrace();
-
} catch (BrokenBarrierException e) {
-
e.printStackTrace();
-
}
-
-
System.out.println(index);
-
}
-
}
-
-
public Test(int count) {
-
this.count = count;
-
-
// 公共屏障点 等待到5个线程后,执行相应的barrierAction
-
barrier = new CyclicBarrier(count, new Runnable() {
-
public void run() {
-
System.out.println("全部线程已执行完毕!");
-
}
-
});
-
-
for (int i = 1; i <= this.count; i++) {
-
new Thread(new Worker(i)).start();
-
}
-
}
-
-
public static void main(String[] args) {
-
new Test(5);
-
}
-
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1164727/
,如需转载,请注明出处,否则将追究法律责任。