CountDownLatch:
CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他3个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch 来实现这种功能了。
CyclicBarrier :
CyclicBarrier 它的作用就是会让所有线程都等待完成后才会继续下一步行动,CyclicBarrier 初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。
CyclicBarrier 初始时还可带一个 Runnable 的参数,此Runnable 任务在CyclicBarrier 的数目达到后,所有其它线程被唤醒前被执行。
Semaphore :
Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量(允许自定义多少线程同时访问)。就这一点而言,单纯的 synchronized 关键字是实现不了的。
Semaphore 是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信导将会被阻塞。
Semaphore 可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为 1 的 Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。
Was this helpful?
0 / 0