Java:新线程中的observer-pattern通知

Mic*_*ael 4 java multithreading observer-pattern

我有以下问题.给定观察者模式的接口EventNotifier:

public interface EventNotifier {
    void newEvent(final String value);
}
Run Code Online (Sandbox Code Playgroud)

实现此接口的类可以在另一个类中注册,该类通常调用newEvent方法.接口由外部库提供,因此我无法更改它.到目前为止,我使用匿名类实现了它:

Thread t = new Thread(new Runnable() {

    @Override    
    public void run() {

      watcher = new Watcher(new EventNotifier() {

          @Override
          public void newEvent(String value) {
              //do some stuff
              //will be called more than 20 times per second
          }
       });
 });
 t.start();
Run Code Online (Sandbox Code Playgroud)

为了更好的代码可读性,我想将这个匿名类暴露给一个新类,它扩展了Thread(因为处理应该与其他东西并行).

如何编写一个Thread,它什么都不做(没有无限循环等),但是等待调用newEvent方法?问题是,newEvent每秒会调用超过20次,所以我无法为每个调用启动一个新线程,但整个事情应该在一个线程中.

我希望你能解决问题,有人可以帮助我.

JB *_*zet 6

是什么让你的帖子感到困惑的是,EventNotifier它实际上是一个观察者/监听器(它接收事件,它不会触发它们),Watcher实际上是通知器(它是创建事件并调用newEvent方法的观察者).

从现在开始,我将使用observableobserver这两个术语.observable触发事件,因此调用观察者的newEvent方法.

如果您希望在单独的线程中完成事件处理,请使用a BlockingQueue.启动一个无休止循环的线程,并take()在每次迭代时尝试从队列中进行.将观察者注册到observable,put()它只接收已接收的事件并将其保存在阻塞队列中.