本文主要是介绍死磕 java同步系列之CyclicBarrier源码解析——有图有真相,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
(1)CyclicBarrier是什么?
(2)CyclicBarrier具有什么特性?
(3)CyclicBarrier与CountDownLatch的对比?
简介
CyclicBarrier,回环栅栏,它会阻塞一组线程直到这些线程同时达到某个条件才继续执行。它与CountDownLatch很类似,但又不同,CountDownLatch需要调用countDown()方法触发事件,而CyclicBarrier不需要,它就像一个栅栏一样,当一组线程都到达了栅栏处才继续往下走。
使用方法
public class CyclicBarrierTest {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(3);for (int i = 0; i < 3; i++) {new Thread(()->{System.out.println("before");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println("after");}).start();}}
}
这段方法很简单,使用一个CyclicBarrier使得三个线程保持同步,当三个线程同时到达cyclicBarrier.await();
处大家再一起往下运行。
源码分析
主要内部类
private static class Generation {boolean broken = false;
}
Generation,中文翻译为代,一代人的代,用于控制CyclicBarrier的循环使用。
比如,上面示例中的三个线程完成后进入下一代,继续等待三个线程达到栅栏处再一
这篇关于死磕 java同步系列之CyclicBarrier源码解析——有图有真相的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!