Skip to content

09_CyclicBarrrier

CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点。因为该屏障在释放等待线程后可以重用,所以称它为循环的屏障。

使用案例

java
public class CyclicBarrierExample {
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> {
            System.out.println("All threads are ready, let's go!");
        });

        Thread t1 = new Thread(() -> {
            try {
                System.out.println("Thread 1 is ready!");
                cyclicBarrier.await();
                System.out.println("Thread 1 is running!");
            } catch (InterruptedException | BrokenBarrierException e) {
                e.printStackTrace();
            }
        });

        Thread t2 = new Thread(() -> {
            try {
                System.out.println("Thread 2 is ready!");
                cyclicBarrier.await();
                System.out.println("Thread 2 is running!");
            } catch (InterruptedException | BrokenBarrierException e) {
                e.printStackTrace();
            }
        });

        Thread t3 = new Thread(() -> {
            try {
                System.out.println("Thread 3 is ready!");
                cyclicBarrier.await();
                System.out.println("Thread 3 is running!");
            } catch (InterruptedException | BrokenBarrierException e) {
                e.printStackTrace();
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}