我有一個與Java線程活鎖有關的有趣問題。在這裏。Java線程鎖住
有四個全局鎖 - L1,L2,L3,L4
有四個線程 - T1,T2,T3,T4
T1需要鎖L1,L2,L3 T2需要鎖L2 T3需要的鎖L3,L4 T4需要鎖L1,L2
所以,問題的模式是 - 任何線程都可以運行並以任何順序獲取鎖。如果任何線程檢測到它所需的鎖不可用,它將釋放之前獲取的所有其他鎖,然後再次重試之前等待一段固定時間。循環重複導致活鎖定條件。
因此,要解決這個問題,我心裏有
1兩種解決方案),讓每一個線程等待重試之前的一段隨機時間。
OR,
2)讓每個線程收購全部以特定的順序(即使線程不要求所有的 鎖)
我不相信這些是僅有的兩個選項提供給鎖我。請指教。
確實。 (1)具有可避免的延遲並且(2)具有極端的死鎖潛力,正如Zim-Zam所強調的那樣,除非未能獲得鎖的線程釋放已經獲得並稍後重試的線程。 – 2013-04-22 15:41:41