我正在尝试为自己设计一个类作为Code Kata,它具有可以设置的value属性,并且该类可以发出ValueListener实例.我们的想法是有一个ValueHolder实例,其中许多客户端线程同时访问它.每个客户端线程都请求了ValueWatcher并调用了waitForValue().
我真正在努力的是我应该在wait()周围的while循环中使用什么条件来避免虚假通知(即值没有改变).我可以看到,这种设计可能使ValueWatcher实例错过更新,但在此阶段我不那么担心.
非常感谢任何提供的指导!
public class ValueHolder {
private int value = 0;
private final Object monitor = new Object();
public void setValue(int value) {
synchronized(monitor) {
this.value = value;
monitor.notifyAll();
}
}
ValueWatcher createChangeWatcher() {
return new ValueWatcher();
}
private class ValueWatcher {
public int waitForValue() {
synchronized(monitor) {
while (==== ??? =====) {
monitor.wait();
return value;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)