java - Java:jsr166y Phaser的教程/解释

This question是两年前被问到的,但它提到的资源不是很有用(imho),就是链接不再有效。
必须有一些很好的教程才能理解Phaser。我读过JavaDoc,但是我的眼睛呆滞了,因为为了真正理解JavaDoc,你必须知道这些类应该如何使用。
有人有什么建议吗?

最佳答案

对于移相器,我回答了几个问题。看到它们可能有助于理解它们的应用程序。它们在底部相连。但是要理解移相器做了什么以及为什么它有用,重要的是要知道它解决了什么问题。
以下是countdownloatch和cyclicbarrier的属性
注:
参与方数量是另一种表达不同主题的方式
不可重用意味着您必须创建
再利用前的屏障
如果线程可以到达并继续工作,则屏障是有利的。
无需等待其他线程,也可以等待所有线程完成
倒计时
固定参与方数量
无法恢复
可升级(查看latch.countDown();advanceable
latch.await();必须等待)
篱栅
固定参与方数量
可重复使用的
不有利
因此,CountDownloach是不可重用的,您必须每次创建一个新实例,但它是前卫的。cylcbarrier可以重复使用,但所有线程必须等待每一方到达屏障。
移相器
动态参与方数
可重复使用的
有利的
当一个线程想让移相器知道时,当线程到达屏障时,它们会调用phaser.register(),这里是它的优势所在。如果线程希望等待所有已注册的任务完成phaser.arrive()
还有一个阶段的概念,在这个阶段中,线程可以等待可能尚未完成的其他操作的完成。一旦所有线程到达相位器的屏障,就会创建一个新的相位(增量为1)。
你可以看看我的其他答案,也许会有帮助:
Java ExecutorService: awaitTermination of all recursively created tasks
Flexible CountDownLatch?

本文翻译自 https://stackoverflow.com/questions/6830904/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java concurrency phaser


相关文章:

java - 在Google App Engine上阅读静态XML文件

ruby-on-rails - 在应用程序的其余部分继续运行时,如何使控制器等待延迟的作业?

python - 检查`concurrent.futures.ThreadPoolExecutor`

java - 移相器类和分层

java - Java如何将负数存储在整数变量中? [重复]

java - 在TableView中进行行编辑

java - 如何创建移相器的链/层

java - 将线程注册到Phaser

java - 导入的org.eclipse无法解析...如何安装Eclipse插件开发环境?

go - 确保仅检索一次值