在Object.wait()之前调用Object.notify()

r.v*_*r.v 5 java concurrency operating-system

如果没有正在等待,使用Object.wait(),任何调用Object.notify()或无效的线程Object.notifyAll().我有一个场景,如果我Object.notify()在等待集为空时调用,后续调用不Object.wait()应该让线程等待.如何实现这一目标?信号量可能是我能想到的一种解决方案.有更优雅的解决方案吗?

Joh*_*int 7

使用标志指示通知.在进入等待之前读取标志并相应地采取行动.

boolean stopped = false;

public void run(){
   synchronized(object){
      while(!stopped)
        object.wait();
   }

}

public void stop(){
  synchronized(object){
    stopped=true;
    object.notify();
  }

}
Run Code Online (Sandbox Code Playgroud)


Kon*_*rus 7

这种情况似乎非常适合Semaphore.打电话Semaphore.release()代替notify()Semaphore.acquire()不是等待.