快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

龙8国际信誉平台:java多线程设计waitnotify机制



synchronized(obj) {

while(!condition) {

obj.wait();

}

obj.doSomething();

}

当线程A得到了obj锁后,发明前提condition不满意,无法继承下一处置惩罚,于是线程A就wait龙8国际信誉平台(龙8国际信誉平台) , 放弃工具锁.

之后在另一线程B中,假如B变动了某些前提,使得线程A的condition前提满意了,就可以唤醒线程A:

synchronized(obj) {

condition = true;

obj.notify();

}

必要留意的观点是:

# 调用obj的wait(), notify()措施前,必须得到obj锁,也便是必须写在synchroni龙8国际信誉平台zed(obj) {…} 代码段内。

# 调用obj.wait()后,线程A就开释了obj的锁,否则线程B无法得到龙8国际信誉平台obj锁,也就无法在synchronized(obj) {…} 代码段内唤醒A。

# 当obj.wait()措施返回后,线程A必要再次得到obj锁,才能继承履行。

# 假如A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,A2,A3中的一个(详细哪一个由JVM抉择)。

# obj.notifyAll()则能整个唤醒A1,A2,A3,然则要继承履行obj.wait()的下一条语句,必须龙8国际信誉平台得到obj锁,是以,A1,A2,A3只有一个有时机得到锁继承履行,例如A1,另外的必要等待A1开释obj锁之后才能继承履行。

# 当B调用obj.notify/notifyAll的时刻,B正持有obj锁,是以,A1,A2,A3虽被唤醒,然则仍无法得到obj锁。直到B退出synchronized块,开释obj锁后,A1,A2,A3中的一个才有时机得到锁继承履行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: