Question

I have a class that calls an interface, like the below:

interface MessageReceiver{
  public void messageReceived(Message m);
}

However, because I am receiving messages from multiple sources that I need to synchronise I would instead like to have code that blocks on receiving messages. i.e. I would like to implement the following (blocking) interface, so my calling process can block on a new message coming in:

public Message getNextMessage();

However, my attempts so far end up getting bogged down with Thread synchronisation and locking issues... when really this could be done on the same Thread (concurrency is not required), but I am not sure how, without delving into assembler... and for that, java is probably not the easiest language to do this...

Thanks in advance!

Was it helpful?

Solution

Create intermediate object with a blocking queue inside. Register it as a MessageReceiver.

class Channel implements MessageReceiver {
  BlockingQueue q=new ArrayBlockingQueue();

  public void messageReceived(Message m) {
     q.put(m);
  }

  public Message getNextMessage() {
    return q.take();
  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top