美文网首页
wait()方法为何要位于同步代码中?

wait()方法为何要位于同步代码中?

作者: 大风过岗 | 来源:发表于2020-11-03 15:54 被阅读0次

    wait()方法的几个要点

    • wait()和notify()机制,本质上是:基于条件的等待-通知模式。它是用于线程间通信的技术手段.

    • wait()和notify()必须是成对出现的,单一的wait()和notify()是没有意义的。wait()和notify()通常位于俩个独立的线程中,来实现这俩个线程间的通信

    • 对状态变量的访问需要进行同步处理

    • 既然是基于条件的等待-通知机制(或者说条件等待队列),这里的条件即为:状态变量。
      由于会涉及到俩个或多个线程并发对此状态变量进行访问或修改,那么要想实现状态变量的一致性,我们就需要对状态变量的访问代码进行同步处理(发生race condition的地方都需要进行同步处理)。

    • "条件等待"、"条件通知",不管是"等待"动作的执行,还是"通知"动作的执行,都依赖于"条件"。这俩个动作都需要和"条件"作为一个整体来处理。即: "条件"变量的访问和"等待"、"通知"动作的执行要求具有原子性,它们要作为同一个动作同时执行

    • wait的spurious wakeup问题
      a thread can wake up from waiting without ever having received a notification

    • wait的典型用法

      synchronized(lock){
        while(!condition){
            lock.wait();
        }
      }
    

    参考文献

    1. wait()方法为何要至于同步块中?

    2.其他

    相关文章

      网友评论

          本文标题:wait()方法为何要位于同步代码中?

          本文链接:https://www.haomeiwen.com/subject/rwtivktx.html