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?