首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CyclicBarrier和CountDownLatch?

CyclicBarrier和CountDownLatch?
EN

Stack Overflow用户
提问于 2012-04-25 22:17:23
回答 1查看 1.3K关注 0票数 0

CyclicBarrier和CountDownLatch有什么区别?我认为有细微的区别,因为两者看起来是一样的。

如果我错了,请告诉我,并解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-30 09:59:56

CountDownLatch用于一次性同步。在使用CountDownLatch时,任何线程都可以随意调用countDown()。调用await()的线程会被阻塞,直到计数达到零,因为其他未被阻塞的线程调用了countDown()。javadoc for CountDownLatch声明:

由于调用countDown()方法,等待方法会一直阻塞,直到当前计数达到零,之后所有等待的线程都会被释放,任何后续的

调用都会立即返回。..。

另一个典型的用法是将一个问题分成N个部分,用一个Runnable来描述每个部分,该Runnable执行该部分并在锁存器上倒计时,然后将所有Runnables排队到一个Executor。当所有子部分完成时,协调线程将能够通过等待。(当线程必须以这种方式反复倒计时时,请改用CyclicBarrier。)

相比之下,循环屏障用于多个同步点,例如,如果一组线程正在运行循环/分阶段计算,并且需要在开始下一个迭代/阶段之前进行同步。根据javadoc for CyclicBarrier

该屏障被称为循环的,因为它可以在等待线程被释放后被重用。

与CountDownLatch不同的是,每次对await()的调用都属于某个阶段,并且可能导致线程阻塞,直到属于该阶段的所有各方都调用了await()。CyclicBarrier不支持显式countDown()操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10317609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档