我有一个实现 Observer & Runnable 的类,如下所示(我知道这个例子可能很笨拙):
public class Triage implements Observer,Runnable{
Observable obsrvbl;
private BlockingQueue<String> messages;
volatile static boolean interrupted=false;
double updated;
Triage(Observable obsrvbl, BlockingQueue messages){
this.obsrvbl=obsrvbl;
this.messages = messages;
obsrvbl.addObserver(this);
}
public void update(Observable o, Object arg){
updated += ((Double)arg).doubleValue();
System.out.println("updated");
}
public void run(){
String msg;
while(!interrupted){
msg=messages.take();
if(msg!=null){
//do something with message
}
}
}
}
正在查看的队列在 Observable 调用 notifyObservers() 的同时填充。当 Queue 上没有任何内容时,在 Observer 上成功调用 update(),但如果 Queue 上有要处理的消息,则永远不会调用 update()。这是预期的行为吗?
我见过这个,但它似乎是一个不同的问题。
这是 Observable - 有点做作:
public class Producer extends Observable implements Runnable {
volatile static boolean interrupted=false;
private BlockingQueue<String> quotes;
Producer(BlockingQueue quotes){
this.quotes=quotes;
}
public void run(){
String msg;
while(!interrupted){
msg=quotes.take();
if(msg!=null){
setChanged();
notifyObservers(Double.valueOf(3.0));
}
}
}
}