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次,所以我无法为每个调用启动一个新线程,但整个事情应该在一个线程中.
我希望你能解决问题,有人可以帮助我.
是什么让你的帖子感到困惑的是,EventNotifier它实际上是一个观察者/监听器(它接收事件,它不会触发它们),Watcher实际上是通知器(它是创建事件并调用newEvent方法的观察者).
从现在开始,我将使用observable和observer这两个术语.observable触发事件,因此调用观察者的newEvent方法.
如果您希望在单独的线程中完成事件处理,请使用a BlockingQueue.启动一个无休止循环的线程,并take()在每次迭代时尝试从队列中进行.将观察者注册到observable,put()它只接收已接收的事件并将其保存在阻塞队列中.