使用多執行緒的時候,除了因為操作共享資料帶來的安全問題,還有乙個就是因為,為了避免安全問題去使用同步,但是因為同步使用不當而產生的死鎖問題。
例子:
public class deadlockdemo }
class runnablea implements runnable
public void run()
} } }
class runnableb implements runnable
public void run()
} } }
class data
發生死鎖的原因:
同步**塊的巢狀。同步**塊互相巢狀會發生互相所要鎖的問題,如果乙個執行緒拿到了a鎖等b鎖,另乙個執行緒拿到了b鎖等a鎖,那麼程式就會堵死,執行不下去,這就是死鎖。
上面的例子舉的不是很好。因為死鎖這問題,在編寫多執行緒的時候規範,一般不會出現的。就算出現了,知道原因,根據原因去查**寫的不規範就可以了。
Java 執行緒的死鎖問題
不同的執行緒分別占用對方需要的同步資源不放棄,都在等待對方放棄自己需要的同步資源,就形成了執行緒的死鎖 專門的演算法 原則 比較出名的演算法有 銀行家演算法 鴕鳥演算法 破壞死鎖產生條件 儘量減少同步資源的定義 後續補充避免死鎖其他相關的內容。死鎖的問題 處理執行緒同步的時候,容易出現 public...
java再複習 執行緒的安全問題以及同步
使用多執行緒,最重要的就是安全問題,何為安全問題?public class threadtest1 class myrunnable implements runnable catch interruptedexception e system.out.println i 執行結果 87 6543 ...
Java執行緒死鎖
需要避免的與多工處理有關的特殊錯誤型別是死鎖 deadlock 死鎖發生在當兩個執行緒對一對同步物件有迴圈依賴關係時。例如,假定乙個執行緒進入了物件x的管程而另乙個執行緒進入了物件y的管程。如果x的執行緒試圖呼叫y的同步方法,它將像預料的一樣被鎖定。而y的執行緒同樣希望呼叫x的一些同步方法,執行緒永...