CountDownLatch、Semaphore和CyclicBarrier分别是什么
时间: 2024-01-22 20:33:38 浏览: 81
CountDownLatch、Semaphore和CyclicBarrier是Java并发工具类,用于多线程编程中的线程协调和同步。
1. CountDownLatch(倒计时门闩):是一个同步辅助类,用于等待其他线程完成一组操作后再继续执行。它通过一个计数器来实现,初始时设置计数器的值,每个线程完成一个操作时,计数器的值减1,直到计数器的值为0时,所有等待的线程才会被唤醒继续执行。
2. Semaphore(信号量):是一种控制并发访问资源的同步工具,用于控制对有限资源的并发访问。它维护了一定数量的许可证(permit),线程在访问资源前需要先获取许可证,如果没有可用的许可证,则需要等待。线程使用完资源后,需要释放许可证,以供其他等待的线程使用。
3. CyclicBarrier(循环屏障):是一种同步辅助类,用于多个线程在某个点上同步等待。它通过一个计数器和一个屏障点来实现。当线程到达屏障点时,会调用await()方法进行等待,直到所有线程都到达屏障点后,才会一起继续执行。与CountDownLatch不同的是,CyclicBarrier的计数器可以重置使用,可以循环使用。
这些工具类提供了不同的线程协调和同步机制,可以根据具体的需求选择合适的工具类来实现线程间的协作和同步。
相关问题
CountDownLatch、CyclicBarrier、Semaphore区别和使⽤场景
CountDownLatch、CyclicBarrier、Semaphore都是Java中用于多线程编程的同步工具类,但它们有不同的作用和使用场景。
1. CountDownLatch
CountDownLatch(倒计时门闩)是一个同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。CountDownLatch维护了一个计数器,初始值为线程数量,线程完成任务后计数器减1。当计数器为0时,等待线程继续执行。CountDownLatch的主要方法是await()和countDown()。
使用场景:CountDownLatch适用于一组线程等待另一组线程完成操作后再继续执行的场景。比如,主线程等待所有子线程完成初始化后再继续执行。
2. CyclicBarrier
CyclicBarrier(循环屏障)是一个同步工具类,它允许一组线程相互等待,直到所有线程都到达某个屏障点后再继续执行。CyclicBarrier的主要方法是await()。
使用场景:CyclicBarrier适用于需要多个线程协同完成某个任务的场景。比如,多个线程同时执行某个操作,需要等待所有线程都执行完后再进行下一步操作。
3. Semaphore
Semaphore(信号量)是一个同步工具类,它允许多个线程同时访问某个资源。Semaphore维护了一个许可证数量,线程需要先获取许可证才能访问资源,访问完后释放许可证。Semaphore的主要方法是acquire()和release()。
使用场景:Semaphore适用于需要限制线程数量访问某个资源的场景。比如,数据库连接池限制同时访问连接的线程数量。
CountDownLatch CyclicBarrier
CountDownLatch 是一个计数器,它可以让一个或多个线程等待其他线程执行完毕后再继续执行。它的主要方法是 countDown() 和 await(),其中 countDown() 用于计数减一,await() 用于等待计数器变为0。与 CountDownLatch 相比,CyclicBarrier 的主要区别在于它可以重复使用,而且所有线程必须同时到达栅栏处才能继续执行后续任务。CyclicBarrier 的重要方法是 await(),并且可以通过构造方法传入一个 Runnable,在所有线程都到达栅栏状态时优先执行该动作。CyclicBarrier 内部使用 ReentrantLock 和 Condition 实现等待和唤醒的功能,通过维护一个 count 变量来记录还有多少个线程没有到达栅栏处。 <span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [CountDownLatch与CyclicBarrier](https://blog.csdn.net/weixin_44442186/article/details/123985119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [JUC多线程:CountDownLatch、CyclicBarrier、Semaphore同步器原理总结](https://blog.csdn.net/a745233700/article/details/120688546)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文