不同的線程死鎖
不同的線程分別占用對方需要的同步資源不放棄,都在等待對方放棄自己需要的同步資源,從而形成死鎖。(出現死鎖后,不會出現異常,不會出現提升,只是所有的線程都處于阻塞狀態,無法繼 續)
lock(鎖):提供了對共享資源的獨占訪問,每次只能有一個線程對lock對象加鎖,線程在開始訪問共享資源之前贏先獲得lock對象。
sychronized,lock的異同:
相同:都可以解決線程的安全問題
不同:sychronized機制在執行完相應的代碼之后,自動釋放同步監視器;lock需要手動啟動同步,結束同步時也需要手動的實現
死鎖的規范定義都是啥?
集合中的每一個進程都在等待只能由本集合中的其他進程才能引發的事件,那么該組進程是死鎖的。
一種情形,此時執行程序中兩個或多個進程發生永久堵塞(等待),每個進程都在等待被其他進程占用并堵塞了的資源。例如,如果進程A鎖住了記錄1并等待記錄2,而進程B鎖住了記錄2并等待記錄1,這樣兩個進程就發生了死鎖現象。
計算機系統中,如果系統的資源分配策略不當,更常見的可能是程序員寫的程序有錯誤等,則會導致進程因競爭資源不當而產生死鎖的現象。
在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現死鎖。例如:事務A 獲取了行 1 的共享鎖。事務 B 獲取了行 2 的共享鎖。