Java線程中Java線程的狀態可以通過舉行:什麼是等待,無法獲得鎖
- 無法獲取的鎖。
- 正在通過wait()方法舉行。
以上兩種情況在Java線程狀態方面有什麼區別?
考慮以下簡單的代碼:
synchronized(object) {
object.wait();
System.out.println("Completed.");
}
如果兩個線程(說的ThreadA和ThreadB)都被關押在wait()方法。例如,當另一個線程調用notifyAll()時,ThreadA將從等待中恢復並獲取對象的鎖定並繼續。 ThreadB也會復活,但無法獲取對象的鎖定並保持到ThreadA退出同步塊爲止。 ThreadB然後獲得鎖並繼續。
其結果將是兩個「已完成」被打印。
在這個例子中,必須有當從ThreadB變化「正在舉行的wait()」到「正在舉行,因爲它是無法獲得對象的鎖」的時間。
我想知道它是如何工作的內部Java編寫的。請幫忙。
基於'enum Thread.State'的Javadoc(我還沒有試過實驗),狀態應該從'WAITING'變成'BLOCKED'。也許你可以做實驗,看看我是否正確。 –
這個[answer](http://stackoverflow.com/a/28726421/6238076)已經非常詳細地解釋了所有等待線程在收到通知後的行爲。 – gdlmx