1

我有一个支持方法,应该在执行之间停止,应该等待特定flag的设置或event发生。

目前我只是polling一个application-scoped variable. 如果它被任何其他请求设置,则等待方法可能会继续。

但是是polling正确的方法,还是有更好的方法?

4

2 回答 2

3

希望我理解正确。轮询效率低下,因为它浪费 CPU 周期。您可以将对象用作信号:

Object signal = new Object();
volatile boolean shouldWait = true;

在等待方法中:

// ...    
synchronized(signal) {
   while(shouldWait) {
      signal.wait();
   }    
}

在信令代码中:

synchronized(signal) {
   shouldWait = false;
   signal.notify();
}
于 2012-08-22T07:03:52.803 回答
2

我建议使用观察者模式,其中第一个 servlet 将是实现Observable的对象的观察者。当发生某些事情时,第二个 servlet 将更新 observable,并调用 setChanged() 方法,该方法又会通知观察者(在这种情况下是您的第一个 servlet)。

于 2012-08-22T07:06:17.077 回答