在 java.util.concurrent 包下,对于计数相关的业务场景使用,都会想到这三个CountDownLatch、CyclicBarrier、semaphore,今天小编就来说说关于cyclicbarrier常用吗?下面更多详细答案一起来看看吧!

cyclicbarrier常用吗(CyclicBarrier从入门到精通)

cyclicbarrier常用吗

在 java.util.concurrent 包下,对于计数相关的业务场景使用,都会想到这三个CountDownLatch、CyclicBarrier、semaphore。

1、怎么理解

CyclicBarrier,翻译为“循环屏障”,作者Doug Lea 将它定义是是一种同步辅助工具,它允许一组线程全部等待彼此到达公共屏障点。 CyclicBarriers 在涉及固定大小的线程组的程序中很有用,这些线程必须偶尔相互等待。 屏障被称为循环的,因为它可以在等待线程被释放后重新使用。从前一段语言了解到的2个点:

使用CyclicBarrier可实现让一组线程等待至某个状态后,然后再全部同时执行;

其次,循环是因为当所有等待线程都被释放以后,CyclicBarrier 可以被重用。

2、什么场景下使用

举个栗子:2个朋友约定好,周六一起去游乐园玩,约定好公园门口相见,不见不散,然后一起进入。

类似这种情形的就可以用CyclicBarrier操作,都到门口了,然后一起进去游玩。

3、初步使用

按照上面栗子来个实现:

public static void main(String[] args) { CyclicBarrier cyclicBarrier=new CyclicBarrier(2,()->{ System.out.println("公园门口相见,一起进入游玩!"); }); for (int i = 0; i < 2; i ) { new Thread(() -> { try { System.out.println("朋友" Thread.currentThread().getName() "到达游乐园门口"); Thread.sleep(2000); cyclicBarrier.await(); } catch (BrokenBarrierException | InterruptedException e) { e.printStackTrace(); } }).start(); } }

4、了解背后的故事

上面学会了什么场景下选择及使用,下一步就要知道它的底层实现原理。了解它实现的本质,了解执行的背后。