将事件驱动代码转换为阻止代码

时间:2014-02-12 05:44:22

标签: java concurrency blocking

我有一个调用接口的类,如下所示:

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

但是,因为我正在接收来自多个源的消息,我需要同步,所以我希望有代码阻止接收消息。即我想实现以下(阻塞)接口,因此我的调用进程可以阻止进入的新消息:

public Message getNextMessage();

然而,到目前为止,我的尝试最终陷入了线程同步和锁定问题...当真正的可能在同一个线程上完成时(不需要并发),但我是不确定如何,不钻研汇编程序......为此,java可能不是最简单的语言...

提前致谢!

1 个答案:

答案 0 :(得分:2)

在里面创建一个阻塞队列的中间对象。将其注册为MessageReceiver。

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

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

  public Message getNextMessage() {
    return q.take();
  }
}