Java:观察者模式在新线程中通知

迈克尔:

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

public interface EventNotifier {
    void newEvent(final String value);
}

实现此接口的类可以在另一个类中注册,该类经常调用方法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();

为了提高代码的可读性,我想将此匿名类公开到一个新类中,该类扩展了Thread(因为处理应与其他事物平行)。

我该如何编写一个不执行任何操作(没有无限循环等)的线程,但要等待调用newEvent方法?问题是,newEvent每秒将被调用20次以上,因此我无法为每个调用启动一个新线程,但是整个事情应该在一个线程中。

希望您能解决问题,并且有人可以帮助我。

JB Nizet:

令您感到困惑的EventNotifier是,实际上是一个观察者/侦听器(它接收到事件,它不会触发它们),而Watcher实际上是一个通知者(由观察者创建一个事件并调用该newEvent方法)。

从现在开始,我将使用可观察观察者一词可观察的事件触发事件,因此调用观察者的newEvent方法。

如果希望事件处理在单独的线程中完成,请使用BlockingQueue启动一个无限循环的线程,并take()在每次迭代时尝试从队列中进行循环。向可观察对象注册观察者,该观察者仅将接收到的事件及其事件put()放入阻塞队列中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章