Java:jsr166y Phaser 的教程/说明

2024-03-15

这个问题 https://stackoverflow.com/questions/1148125/resources-on-the-upcoming-fork-join-framework两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。

一定有一些很好的教程可以理解Phaser http://download.oracle.com/javase/7/docs/api/java/util/concurrent/Phaser.html。我读过 javadoc,但我的目光呆滞,因为为了真正理解 javadoc,你必须知道这些类应该如何使用。

有人有什么建议吗?


对于 Phaser 我已经回答了几个问题。看到它们可能有助于理解它们的应用。它们在底部相连。但要了解 Phaser 的作用及其用途,了解它解决什么问题很重要。

以下是 CountdownLatch 和 CyclicBarrier 的属性

Note:

  • 参与方数量是不同线程数的另一种表达方式
  • 不可重用意味着您必须创建一个新实例 重复使用前的屏障
  • 如果线程可以到达并继续工作,则屏障是可推进的 无需等待其他线程或可以等待所有线程完成

倒计时锁存器

  • 固定人数的聚会
  • 不可重复使用
  • 先进的(看看latch.countDown(); 可推进的 latch.await(); 必须等待 )

循环势垒

  • 固定人数的聚会
  • Reusable
  • 不可提前

因此 CountdownLatch 不可重用,每次都必须创建一个新实例,但它是可预用的。 CylicBarrier 可以重复使用,但所有线程必须等待各方到达屏障。

Phaser

  • 动态参与方数量
  • Reusable
  • 先进的

当一个线程想要为 Phaser 了解时,它们会调用phaser.register()当线程到达屏障时,它们调用phaser.arrive() 这就是它可以推进的地方。如果线程想要等待所有注册任务完成phaser.arriveAndAwaitAdvance()

还有一个阶段的概念,在该阶段中线程可以等待可能尚未完成的其他操作完成。一旦所有线程到达移相器的屏障,就会创建一个新阶段(增量一)。

你可以看看我的其他回答,也许会有帮助:

Java ExecutorService:awaitTermination所有递归创建的任务 https://stackoverflow.com/questions/4958330/java-executorservice-awaittermination-of-all-recursively-created-tasks/4958476#4958476

灵活的倒计时锁存器? https://stackoverflow.com/questions/1636194/flexible-countdownlatch/1637030#1637030

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:jsr166y Phaser 的教程/说明 的相关文章

随机推荐