code.7z

一、概述

CountDownLatch(门阀)设计模式定义:对多个线程进行捆绑,只有当所有线程执行完成,才表示本次执行完成。

比如:A,B,C 3个人相约在某某广场集合,准备一起去哪哪哪里。当天 A、B陆续到了,但是 C 由于堵车还没到,于是 A,B 就等 C,等 C 来了在一起出发。

实现原理: 实现某个类 CountDownLatch,维护了某个线程安全的数值,通过观察该数值来控制流程是否结束。
如:针对三个人的集合游玩,在类中维护线程安全的数值3,到达一人数值-1,当数值为 0 时,表示所有人都到了。

二、简单实现

模拟:A、B、C 三个人相约广场,三个人乘坐不同交通工具出发,当所有人都到达广场时,在一起出发。

针对这种情况存在两种情况:

  • A、B、C 无论什么原因,只要其中有人没到就一直等人齐再出发
  • A、B、C 无论谁到谁没到,在指定地点等待 一定时间,如果还没来就先出发了。

2.1、无线等待 Latch

image.png
limit 不减少至 0,当前线程一直阻塞。

2.2、等待一定时间 Latch

image.png