notify()和notifyAll()的区别?
notify():
唤醒一个处于等待状态的线程,
注意的是在调用此方法的时候,
并不能确切的唤醒某一个等待状态的线程,
而是由JVM确定唤醒哪个线程,而且不是按优先级。
notifyAll():
唤醒所有处入等待状态的线程;
并可以理解为把他们排进一个队列;
只不过只有头部的线程获得了锁,才能运行;
注意!!并不是给所有唤醒线程一个对象的锁,而是让它们竞争,
当其中一个线程运行完就开始运行下一个已经被唤醒的线程,因为锁已经转移了。
(这个时候是否运行已经不是因为等待状态,而是处于runnning队列中)
本文详细解析了Java中线程同步方法notify()与notifyAll()的功能差异。notify()用于唤醒一个等待线程,但具体唤醒哪一个由JVM决定;而notifyAll()则唤醒所有等待线程,使它们有机会竞争锁,进入运行状态。
711

被折叠的 条评论
为什么被折叠?



