相关疑难解决方法(0)

计数器更改时通知线程

我正在尝试为自己设计一个类作为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)

java concurrency multithreading

6
推荐指数
1
解决办法
983
查看次数

标签 统计

concurrency ×1

java ×1

multithreading ×1