这个问题 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();
必须等待 )
循环势垒
因此 CountdownLatch 不可重用,每次都必须创建一个新实例,但它是可预用的。 CylicBarrier 可以重复使用,但所有线程必须等待各方到达屏障。
Phaser
当一个线程想要为 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(使用前将#替换为@)