CountDownLatch
CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。<br>
Semaphore
信号量, 可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。
CyclicBarrier
中文意思是“循环栅栏”,可以用于多线程计算数据,最后合并计算结果的场景。<br>
CountDownLatch与CyclicBarrier比较
CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset()<br>方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。
CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。比如以下代码执行完之后会返回true。
CountDownLatch会阻塞主线程,CyclicBarrier不会阻塞主线程,只会阻塞子线程。
某线程中断CyclicBarrier会抛出异常,避免了所有线程无限等待。