首先介绍实现改功能的相关名词:Semaphore,CountDownLatch ,newCachedThreadPool
1.Semaphore
一个计数信号量。顾名思义,一个信号量拥有一定数量的许可证,一个线程acquire需要申请到许可证才能获取锁,否则阻塞等待;释放的时候会返还许可证给阻塞的线程申请。
2.CountDownLatch
CountDownLatch是一个同步的辅助类,它能够使一个线程等待其他线程完成各自的工作后再执行。CountDownLatch是基于AbstractQueuedSynchronizer(AQS)实现的,其通过state作为计数器。构造CountDownLatch时初始化一个state,以后每调用countDown方法一次,state减1;当state=0时,唤醒在await上被挂起的线程。CountDownLatch的计数器state不能被重置,如果需要一种能重置count的版本,可以考虑使用CyclicBarrier。