在Java中的常规对象上调用notify

考虑以下代码片段:

Object stateChanged = new Object();
if(state == GLGameState.Finished) {
 //Don't mind those two methods
 screen.pause();
 screen.dispose();
 synchronized(stateChanged) {
 this.state = GLGameState.Idle;
 stateChanged.notifyAll();
     }
 } 

我有点困惑,因为我之前从未见过对任何对象调用notifyAll / wait。这是如何运作的?在此之前,我还没有看到什么可以等待。这是《 Beginning Android Games》一书的摘录。我不确定此代码片段是否足够,但如果不足够,请告诉我。 TLDR在对象上调用notifyall,notify和wait后如何工作?我看过的所有教程都只对自己调用wait()或notify()。先感谢您!编辑:请注意,到目前为止,尚未在stateChanged上调用wait(),这也使我有些困惑。


评论
  • 泪眸人
    泪眸人 回复

    notify和wait是线程之间同步的工具-一个线程一直等待,直到被另一个线程的通知唤醒为止。

    notify / notifyAll唤醒在该特定对象上等待的一个/所有线程。

    如果没有线程在等待,则通知不执行任何操作。如果甚至没有编写代码来让线程在该对象上等待,则通知毫无意义。

    因此,在某处应该有代码等待stateChanged。

    正在等待/通知的特定对象只是服务者与通知者之间的协议(“让我们在对象Foo集合”)。有时,将同一对象中的几个方法使用其包含的对象作为集合点是合适的。有时,如您的示例中所示,添加一个对象仅用于等待/通知是适当的-在这种情况下,它可能是最简单的对象,即实际的Object(所有对象的基类)。