Domanda

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!

È stato utile?

Soluzione

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();
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top