Java 并发编程之同步工具类栅栏 CyclicBarrier

CyclicBarrier 用来阻塞一组线程,等待线程完成后才开始某件事情。

例如,开启5个线程,每个线程使用await方法开始阻塞,等待5个线程都完成,才开始执行await方法后面的代码。

public class CyclicBarrierTest {
    private static CyclicBarrier barrier = new CyclicBarrier(5);

    static class Writer extends Thread {
        private CyclicBarrier cyclicBarrier;
        public Writer(CyclicBarrier cyclicBarrier) {
            this.cyclicBarrier = cyclicBarrier;
        }
        @Override
        public void run() {
            System.out.println("线程" + Thread.currentThread().getName() + "正在写入数据...");
            try {
                Thread.sleep(5000);
                // 以睡眠来模拟写入数据操作
                System.out.println("线程" + Thread.currentThread().getName() + "写入数据完毕,等待其他线程写入完毕");
                // 关键一句话
                cyclicBarrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
            System.out.println("所有线程写入完毕,继续处理其他任务...");
        }
    }

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+"开始执行");
        int count = 5;
        CyclicBarrier barrier  = new CyclicBarrier(count);
        for(int i=0;i<count;i++) {
            new Writer(barrier).start();
        }
        System.out.println(Thread.currentThread().getName()+"继续执行");
    }
}
上一篇:Java并发练习:简单运用CyclicBarrier进行分治策略


下一篇:并发编程及工具类