考慮:如何知道上次派對何時開始Phaser.arrive()?
Executor executor = ...;
Phaser phaser = new Phaser(n);
for (int i=0; i<n; ++i)
{
Runnable task = new Runnable()
{
public void run()
{
phaser.arriveAndDeregister();
if (lastTask)
doSomething(this);
}
}
// run tasks using a thread-pool (order is not guaranteed)
executor.submit(task);
}
我想看看我的最後一個任務,以火doSomething()
這取決於任務的內部狀態。我發現Phaser.onAdvance(int, int),但在這種情況下如何使用它並不清楚。
我不認爲你的代碼應該檢查'if(registeredParties == 0)',因爲'onAdvance()'保證只在所有各方到達後才被調用。無論是否有0方等待或更多,該事件應該會觸發。 – Gili
很對,編輯。 – rxg