我已经实现MyListener
了从两个不同的线程访问。
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()
可能会因为以前的事件而立即返回。
关于这个问题的任何想法?