对于Phaser,我已经回答了几个问题。看到他们可能有助于理解他们的应用程序。它们链接在底部。但是要了解Phaser的功能以及其有用性,了解其解决方案的重要性。
这是CountdownLatch和CyclicBarrier的属性
注意:
- 参与方数量是表示不同线程数的另一种方式
- 不可重用意味着您必须在重用之前创建屏障的新实例
- 如果线程可以到达并继续工作而无需等待其他线程或可以等待所有线程完成,则屏障是可扩展的
倒数计时
- 固定人数
- 无法恢复
- 可晋级(看
latch.countDown();
晋级latch.await();
必须等待 )
循环屏障
- 固定人数
- 可重用
- 不可提前
因此,CountdownLatch不可重用,您每次都必须创建一个新实例,但是该实例是可用的。可以重用CylicBarrier,但所有线程必须等待各方到达屏障。
移相器
- 动态聚会人数
- 可重用
- 先进的
当线程想要被Phaser知道
phaser.register()时,它们将在线程到达屏障时调用,
phaser.arrive()
并且在此处可以进行扩展 。如果线程要等待所有注册的任务完成
phaser.arriveAndAwaitAdvance()
还有一个阶段的概念,其中线程可以等待可能尚未完成的其他操作完成。一旦所有线程到达移相器的屏障,就会创建一个新阶段(增量为1)。



