其他分享
首页 > 其他分享> > notifyAll()

notifyAll()

作者:互联网

调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程;这一点与notify()方法是不同的。notifyAll()方法只是唤醒等待该对象的monitor的线程,并不决定哪个线程能够获取到monitor。
举个简单的例子:
假如有三个线程Thread1、Thread2和Thread3都在等待对象objectA的monitor,此时Thread4拥有对象objectA的monitor,当在Thread4中调用objectA.notify()方法之后,Thread1、Thread2和Thread3只有一个能被唤醒。注意,被唤醒不等于立刻就获取了objectA的monitor,要等notify所在线程走出同步块才能获取到monitor。假若在Thread4中调用objectA.notifyAll()方法,则Thread1、Thread2和Thread3三个线程都会被唤醒,至于哪个线程接下来能够获取到objectA的monitor就具体依赖于操作系统的调度了。

其要注意一点,一个线程被唤醒不代表立即获取了对象的monitor,只有等调用完notify()或者notifyAll()并退出synchronized块,释放对象锁后,其余线程才可获得锁执行。

标签:objectA,monitor,notifyAll,线程,notify,唤醒
来源: https://www.cnblogs.com/lei-jun/p/16477849.html