請參考下面的代碼爲什麼它不會造成死鎖?
package com.test;
public class DeadLock {
private void method1() {
synchronized (Integer.class) {
method2();
}
}
private void method2() {
synchronized (Integer.class) {
System.out.println("hi there");
}
}
public static void main(String[] args) {
new DeadLock().method1();
}
}
按我的理解,在method2
代碼不應該在任何情況下執行,因爲method1
持有Integer.class
和method2
嘗試鎖再次訪問Integer.class
鎖。但令我驚訝的是,代碼運行良好,它向控制檯輸出「hi there」。有人可以澄清嗎?
互動(遞歸)互斥?在這種情況下,互斥鎖可以從同一個線程獲取多倍的時間,但會從多個線程中(死鎖)鎖定 – 2014-10-29 11:11:59
爲什麼你認爲它應該死鎖?它直截了當的不是嗎? – SMA 2014-10-29 11:13:33
如果您只有一個線程,則無法獲取鎖定。 – Leonidos 2014-10-29 11:17:23