• java 多线程&wait/notify机制的原理——62


    实现wait/notify机制的条件

    拥有相同锁的线程才可以实现 wait/notify机制,所以后面的描述中都是假定操作同一个锁。

    wait()方法及作用

    wait() 方法是 Object类的方法,它的作用是使当前执行 wait() 方法的线程等待,在 wait() 所在的
    代码行处暂停执行,并释放锁,直到接到通知或被中断为止。在调用wait()之前,线程必须获得该对象的对象级别锁,即只能在同步方法或同步块中调用 wait()方法。通过通知机制使某个线程继续执行 wait()方法后面的代码时,对线程的选择是按照执行 wait()方法的顺序确定的,并需要重新获得锁。如果调用 wait()时没有持有适当的锁,则抛出 IllegalMonitorStateException,它是RuntimeException 的一个子类,因此不需要 try-
    catch 语句捕捉异常。

    notify()方法及作用 

    notify()方法要在同步方法或同步块中调用,即在调用前,线程必须获得锁,如果调用 notify()
    时没有持有适当的锁,则会抛出IllegalMonitorStateException 。该方法用来通知那
    些可能等待该锁的其他线程,如果有多个线程等待,则按照执行 wait() 方法的顺序对处于 wait 状态的线程发出一次通知(notify),并使该线程重新 获取锁。需要说明的是,执行 notify()方法后,当前线程不会马上释放该锁,呈 wait状态的线程也并不能马上获取该对象锁,要等到执行 notify()方法的线程将程序执行完,也就是退出synchronized同步区域后,当前线程才会释放锁,而呈wait状态的线程才可以获取该对象锁。当第一个获得了该对象锁的 wait线程运行完毕后,它会释放该对象锁,此时如果没有再次使用 notify语句,那么其他呈 wait状态的线程因为没有得到通知,会继续处于 wait 状态。

    总结

    wait() 方法使线程暂停运行,而notify()方法通知暂停的线程继续运行。

     

  • 相关阅读:
    网络安全(黑客)—自学笔记
    python应用中使用了multiprocessing多进程,使用pyinstaller打包出来的程序可能产生多个窗口
    发送信息到我的眼镜上
    免费领取源码-小程序+spring boot流浪动物救助系统 12783
    Tdengine技术实践
    C++ 多态和虚函数详解
    非全自研可视化表达引擎-RuleLinK
    常见密码学算法简介
    一款优秀的盲盒APP源码成品需要具备什么条件
    案例-注册页面(css)
  • 原文地址:https://blog.csdn.net/zp357252539/article/details/125438167