简单理解,望指正
来源: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回答
-
小伙伴写得很好,不过不一定是等待队列,可也能是别的数据结构,比如set。
00
相似问题