我需要在一個功能中鎖定兩個對象,並且當前代碼像這樣流淌;如何避免嵌套同步和導致的死鎖
Object obj1 = ...//get from somewhere
Object obj2 = ...//get from somewhere
synchronized(obj1){
...//blah
synchronized(obj2){
...//blah
}
}
正如你可以看到這是一個簡單而直配方死鎖如果另一個線程運行這段代碼與OBJ1和兩個倒。
有沒有辦法避免這種情況使用concurrency-utils鎖?
我正在考慮維護一個對象及其鎖的映射,並驗證它們是否可用,但似乎無法提出一種可以預測鎖定順序的乾淨方法。
我只是你的固定格式,而現在你又毀了。看預覽!你看到這一切都搞砸了。您需要選擇代碼並按下CTRL + K。 – EboMike 2011-03-01 06:37:59
我的IE6(唯一一個允許在工作區:()在stackoverflow的編輯工具欄上很糟糕,對不起,現在修復了格式 – 2011-03-01 06:47:33
如果兩個對象需要一起工作,那麼也許你在同步中執行的功能塊可以被移動到這兩個對象/類之一(這是一個很好的OO設計順便說一句)作爲一個好處,這將大大有助於同步問題 – Gugussee 2011-03-01 09:49:31