舉乙個死鎖的例子

2021-09-10 23:36:35 字數 705 閱讀 3331

大家工作中或者面試的時候,會碰到死鎖的問題,大家都聽說過兩個執行緒互相等待,從而導致等死(鎖)的情況吧,就是執行緒1持有物件1的鎖,執行緒2持有物件2的鎖,然後兩者都等待對方釋放其持有物件的鎖,然後一直等,等到死亡。但是聽是都聽過,若有人讓你寫個例子呢???

下面就舉個例子:

public class dielock catch (exception e)

synchronized (t2)}}

}.start();

new thread()catch (exception e)

synchronized (t1)}}

}.start();}}

執行的結果如下:

兩者一直等待對方釋放持有的鎖,然後一直等到死亡。。。

中間加睡眠時間,是為了防止執行緒一執行就獲得兩個物件的鎖。

如何避免死鎖的產生呢???

下面給幾個建議:

避免乙個執行緒同時獲取多個鎖;

避免乙個執行緒在鎖內同時佔據多個資源,盡量保證每個鎖只佔據乙個資源;

嘗試使用定時鎖,使用lock.trylock(timeout)來代替使用內部鎖機制;

對於資料庫鎖,加鎖和解鎖必須在乙個資料庫連線裡,否則會出現解鎖失敗的情況。

寫乙個死鎖的例子

這是乙個很好玩的題,做併發的話,不小心能寫出來。讓你寫乙個一定死鎖的例子,沒有思考過的話,確實不容易。下邊的是 的乙個,別人寫的。非常典型的乙個互相等待導致的死鎖的例子,很好理解。package com.spri.test 在實際程式設計中,要盡量避免出現死鎖的情況,但是讓你故意寫乙個死鎖的程式時似...

飛鴿傳書舉乙個小例子

飛鴿傳書舉乙個小例子,每個程式視窗右上角都有三個按鈕,如最小化 關閉等。賈伯斯覺得不好看,不易用,他提出改用紅綠藍的交通燈。這樣修改後,果然 mac os 漂亮和易用了很多。目前網際網路和手機上的應用開發,都非常強調小團隊研發。這樣研發模式速度會快很多,但對程式設計師的綜合素質的要求也就更高了。飛鴿...

Java產生死鎖的乙個簡單例子

思路是建立兩個字串a和b,再建立兩個執行緒a和b,讓每個執行緒都用synchronized鎖住字串 a先鎖a,再去鎖b b先鎖b,再鎖a 如果a鎖住a,b鎖住b,a就沒辦法鎖住b,b也沒辦法鎖住a,這時就陷入了死鎖。直接貼 public class deadlock class lock1 impl...