我知道,我們使用這個成語等待通知辦理虛假喚醒:而(條件){的Object.wait()}成語
synchronized (obj) {
while(somecond)
obj.wait();
}
如果虛假喚醒出現的時候,我們就檢查狀態並返回到等待狀態。
但是,審時度勢:
- 我們開始等待,並obj.wait()釋放鎖定OBJ。
- 等待線程虛假由OS
- 通知我們返回檢查條件(與obj鎖釋放因等)
- obj.notify()就在那一刻被調用。
是的,條件檢查是非常快速的,我們可以在條件檢查中,而不是在obj.wait()
中的機率可以忽略不計。在這種情況下,我們可以鬆動obj.notify()
電話。
我誤解了一些東西,或者我們真的可以使用這種模式鬆開通知?
但是,不是調用obj.wait()釋放對obj的鎖嗎?或者obj再次被鎖定,因爲我們得到虛假喚醒,請等待並移動到條件檢查? – Oroboros102
它釋放它,但爲了能夠執行wait()調用之後的操作,它需要重新獲取'obj'上的鎖。同步塊內的每條指令只有在線程持有鎖的情況下才能執行。 –