我實現了MyListener
這是從兩個不同的線程訪問。如何正確使用Phaser?
class MyListener implements Listener {
private final Phaser phaser = new Phaser(2);
@Override
public void changed() {
phaser.arrive();
}
public void await() {
phaser.arriveAndAwaitAdvance();
}
}
我使用它像這樣在主線程
MyListener listener = new Listener();
someObject.setListener(listener);
doSomething(); //it would result in Listener.changed() being invoked
listener.await();
doSomething(); //it would result in Listener.changed() being invoked
listener.await();
我有幾個擔心:
- Java文檔指出調用
arrive()
和arriveAndAwaitAdvance()
無需調用register()
第一是不正確的。 changed()
可能會多次調用相同的事件。我預計await()
之一可能會因前一事件而立即迴歸。
關於這個問題的任何想法?
你想實現什麼?每個'doSomething()'後的 – Holger
,'listener.await()'只有在其他線程調用changed時纔會返回。 –