-
概念: CyclicBarrier循环屏障,它的作用就是会让所有线程都等待完成后才会继续下一步行动。
-
例子:大伙聚餐,要等所有朋友都到了才开始吃饭
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class CyclicBarrierTest {
public static void main(String[] args) {
CyclicBarrier cb = new CyclicBarrier(10);
for (int i = 0; i < 10; i++) {
new Thread(new User(cb, "朋友" + i)).start();
}
}
}
class User implements Runnable {
private String name;
private CyclicBarrier cb;
public User(CyclicBarrier cb, String name) {
this.cb = cb;
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep((long) (Math.random() * 2000));
System.out.println(name + " 到了");
cb.await();
System.out.println(name + ":到齐了,开始吃饭吧");
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
朋友2:到了
朋友5:到了
朋友3:到了
朋友8:到了
朋友4:到了
朋友7:到了
朋友9:到了
朋友6:到了
朋友1:到了
朋友0:到了
朋友0:到齐了,开始吃饭吧
朋友2:到齐了,开始吃饭吧
朋友5:到齐了,开始吃饭吧
朋友3:到齐了,开始吃饭吧
朋友4:到齐了,开始吃饭吧
朋友9:到齐了,开始吃饭吧
朋友6:到齐了,开始吃饭吧
朋友8:到齐了,开始吃饭吧
朋友1:到齐了,开始吃饭吧
朋友7:到齐了,开始吃饭吧