CountDownLatch:递减计数器闭锁,直到达到某个条件时才放行,多线程可以调用await方 法一直阻塞,直到计数器递减为零。比如我们连接zookeeper,由于连接操作是异步的,所以 可以使用countDownLatch创建一个计数器为1的锁,连接挂起,当异步连接成功时,调用countDown通知挂起线程;再比如5V5游戏竞技,只有房间人满了才可以开始游戏。

FutureTask:带有计算结果的任务,在计算完成时才能获取结果,如果计算尚未完成,则阻 塞 get方法。FutureTask将计算结果从执行线程传递到获取这个结果的线程。

Semaphore:信号量,用来控制同时访问某个特定资源的数量,只有获取到许可acquire,才 能够正常执行,并在完成后释放许可,acquire会一致阻塞到有许可或中断超时。使用信号量可以轻松实现一个阻塞队列。

CyclicBarrier:类似于闭锁,它可以阻塞一组线程,只有所有线程全部到达以后,才能够继续 执行,so线程必须相互等待。这在并行计算中是很有用的,将一个问题拆分为多个独立的子问 题,当线程到达栅栏时,调用await等待,一直阻塞到所有参与线程全部到达,再执行下一步 任务。