用CountDownLatch做并发练习题

拿CountDownLatch对比着Semaphore来学习会简单很多。
CountDownLatch比起Semaphore来使用简单很多,它只有await和countDown方法。也就是说

1) CountDownLatch初始化之后设置的计数值在被减到0之后就不能被复原了,而Semaphore可以通过release恢复信号/许可的数量,所以CountDownLatch能解决的问题范畴要小于Semaphore。比如在用到了semaphore.release这种操作的代码里,我们基本是没办法用CountDownLatch替换Semaphore来解决的。
2) 另外,从允许、禁行这个方向上讲,Semaphore是信号/许可数量大于0时线程可运行(semapher.acquire不阻塞),对于CoundDownLatch来说则是计数等于0时线程可运行(countDownLatch.await不阻塞)。

所以,对于LeetCode多线程练习题,只有1114题可以用CountDownLatch来完成。 https://leetcode-cn.com/problemset/concurrency/