简单理解,望指正

来源:7-2 wait方法

白篱

2021-09-01

wait(),notify(),notifyAll()都是Object里面的方法,实际上所有对象都可调用,但是需要先获取monitor锁,不然会报错

Exception in thread "Thread-0" java.lang.IllegalMonitorStateException

只能由被获取monitor锁的对象(synchronized(对象) 或者 this)才能调用这些方法
而wait是将当前执行这行代码的线程释放monitor并进入Waiting状态,加入等待队列
notify是将曾经释放过该对象的monitor的线程(等待队列)随机唤醒一个(具体由JVM实现)
notifyAll是将曾静释放过该对象的monitor的线程(等待队列)中唤醒全部。
唤醒后,执行notify方法的线程继续执行完毕后释放monitor,由唤醒的线程去抢monitor来执行本身代码
wait和notify都是针对相同的锁而言,不然也会报上述错误

写回答

1回答

悟空

2021-09-02

小伙伴写得很好,不过不一定是等待队列,可也能是别的数据结构,比如set。

0
0

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程