I have implemented MyListener
which is accessed from two different threads.
class MyListener implements Listener {
private final Phaser phaser = new Phaser(2);
@Override
public void changed () {
phaser.arrive();
}
public void await () {
phaser.arriveAndAwaitAdvance();
}
}
I use it like this in main thread
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();
I have several concerns:
- Java docs states that calling
arrive()
andarriveAndAwaitAdvance()
without callingregister()
first is not correct. changed()
might be invoked several times for the same event. I expect that one ofawait()
might return immideately because of previous event.
Any idea about this concerns?