如果我在兩個方法中使用同步(this),另一個調用另一個方法,我會陷入死鎖狀態,還是會工作,因爲線程已經擁有鎖定了?Java對象鎖定:調用其他方法時發生死鎖?
圖片下面的類:
public class Test {
public void foo() {
synchronize(this) {
bar();
}
}
public void bar() {
synchronize(this) {
// do something
}
}
}
正如你所看到的,有兩種方法foo和酒吧,這既要靠同步。當調用foo()時,會在(this)上獲得一個鎖。會禁止在被foo調用時執行相同的操作(從而導致死鎖),還是會意識到鎖已經被同一個線程獲取?
希望我的解釋是多還是不太清楚;-)
爲什麼你對此做同步?你班上還有其他方法嗎?您可以在方法上使用synchornized作爲關鍵字。 –
科林,我創建了一個內部處理緩存項目過期的緩存,通過使用兩個映射,一個用於數據,另一個用於相應的過期時間戳。因此,既不用同步方法也不用同步地圖就可以完成這項工作,因爲這兩個地圖都是由許多方法操縱的,並且需要隨時同步。 – usimon