我有以下问题。给定观察者模式的接口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次以上,因此我无法为每个调用启动一个新线程,但是整个事情应该在一个线程中。
希望您能解决问题,并且有人可以帮助我。
令您感到困惑的EventNotifier
是,实际上是一个观察者/侦听器(它接收到事件,它不会触发它们),而Watcher
实际上是一个通知者(由观察者创建一个事件并调用该newEvent
方法)。
从现在开始,我将使用可观察和观察者一词。可观察的事件触发事件,因此调用观察者的newEvent方法。
如果希望事件处理在单独的线程中完成,请使用BlockingQueue
。启动一个无限循环的线程,并take()
在每次迭代时尝试从队列中进行循环。向可观察对象注册观察者,该观察者仅将接收到的事件及其事件put()
放入阻塞队列中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句