美文网首页
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()方法为何要位于同步代码中?

    wait()方法的几个要点 wait()和notify()机制,本质上是:基于条件的等待-通知模式。它是用于线程间...

  • 线程 — wait()方法

    wait()方法 wait()方法必须在synchronized同步代码块里面,因为wait()作用就是释放同步锁...

  • 【进阶】 wait sleep

    wait sleep 区别 不同: wait会释放锁,而sleep不会释放锁 wait只能在同步方法和同步代码块中...

  • 释放锁的三种情况

    1.执行完同步方法或同步代码块 2.在同步方法或同步代码块中调用wait方法 3.在同步方法或同步代码块中发生异常...

  • 多线程设计模式阅读日记

    1.多线程的常用方法 wait(), notify(), notifyAll(), 方法都必须在同步代码中,而Th...

  • wait/notify/notifyAll 方法的使用注意事项?

    为什么 wait 必须在 synchronized 保护的同步代码中使用? 在使用 wait 方法时,必须把 wa...

  • wait/notify

    1.两者只能运行在同步方法或者同步代码块中2.某对象调用wait/notify方法前,必须获得【调用对象的锁】,其...

  • 面试相关之 Java 并发

    1. sleep()和wait()的区别? 2. synchronized同步代码块还有同步方法本质上锁住的是谁?...

  • wait、notify实现线程间通讯

    一、概念解读 synchronized:同步锁,可修饰方法、代码块; wait:使当前线程进入等待状态,直到锁定对...

  • 等待通知机制之wait/notify

    wait/notify wait()方法的作用就是将当前执行代码的线程进行等待,wait()方法时Object类的...

网友评论

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

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