因此,可以說我有這樣的代碼:同步對象處理是否傳遞給Java中的被調用函數?
public void bar(){
synchronized(foo){foo.remove(0)}
}
public void doStuff(){
synchronized(foo){
bar()
}
}
將同步意識到當前鏈我在有這個鎖和繼承它還是會死鎖?
因此,可以說我有這樣的代碼:同步對象處理是否傳遞給Java中的被調用函數?
public void bar(){
synchronized(foo){foo.remove(0)}
}
public void doStuff(){
synchronized(foo){
bar()
}
}
將同步意識到當前鏈我在有這個鎖和繼承它還是會死鎖?
您從同步塊獲得的鎖是可重入。這不會死鎖,一個線程可以多次獲取對同一個對象的鎖定。
正如馬特所說,它不會死鎖。
我怎麼把它看作
,這種鎖機制是不依賴在方法調用但 控制流。 單線程如何執行語句,並且線程 遇到同步塊時,它會要求鎖定同步簽名中的對象。
如果有,它會進入否則會在對象的鎖池中等待,直到得到通知。
執行了doStuff()的線程已經執行了鎖定,所以這就是爲什麼沒有死鎖的情況