关于java:CountDownLatch和CyclicBarrier

3次阅读

共计 1120 个字符,预计需要花费 3 分钟才能阅读完成。

CyclicBarrier 的官网解释:

A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.

CyclicBarrier 是一个同步的辅助类,容许一组线程相互之间期待,达到一个共同点,再继续执行。

CountDownLatch 的官网解释:

A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.

CountDownLatch 是一个同步的辅助类,容许一个或多个线程,期待其余一组线程实现操作,再继续执行。

CountDownLatch场景神还原:

一年级期末考试要开始了,监考老师发下去试卷,而后坐在讲台旁边玩着手机期待着学生答题,有的学生提前交了试卷,并约起打球了,等到最初一个学生交卷了,老师开始整顿试卷,贴封条,上班,陪老婆孩子去了。这里提前交卷的学生(能够了解为线程),做完本人的试卷是能够去干本人的事的。而老师只能期待所有的学生全副答完试卷当前才能够干本人的事件。

CountDownLatch场景补充:

玩 LOL 英雄联盟时会呈现十个人不同加载状态,然而最初一个人因为各种起因始终加载不了 100%,于是游戏零碎主动期待所有玩家的状态都筹备好,才展示游戏画面。

形象图:(感觉很形象)

每位乘客 (线程) 上车后,可用座位减 1,直到为 0,老司机就开始发车了。

CyclicBarrier: 可看成是个阻碍,所有的线程必须到齐后能力一起通过这个阻碍。

CyclicBarrier场景:公司组织户外拓展流动,帮忙团队建设,其中最重要一个我的项目就是整体员工(包含女同事,BOSS)在实现其余我的项目时,达到一个高达四米的高墙没有任何抓点,要求所有人,一个不能少的越过高墙,能力持续进行其余我的项目。其中越过高墙的人,并不能干本人的事,或者去进行下一个我的项目,必须全副人员都翻过高墙后才能够进行下一个我的项目。

总结:

  1. CountDownLatch 能够让线程分段执行,比如说所有线程做完本人负责的第一阶段的工作后再独特干一件事
  2. CyclicBarrier 须要等到每个线程都达到某个点的时候,再一起做一件事或者各自做事,还能够等到某个点后,先汇总后果,而后再各自做事,比方 barrierAction 线程。
  3. CyclicBarrier 能够不停的循环做同样的事,构造函数中线程数量必须跟理论的子线程数量相等。

以上内容大部分来自:https://blog.csdn.net/zzg1229…

正文完
 0