java執行緒(三)死鎖例子

2021-08-31 08:20:29 字數 814 閱讀 7788

public class testthread implements runnable catch(interruptedexception e)

synchronized(o2) }}

if(flag == 0) catch(interruptedexception e)

synchronized(o1) }}

}public static void main(string args)

}

[color=red][size=medium]執行緒t1執行的時候他鎖定了o1,然後等待sleep1000以後準備鎖定o2。可是在他sleep的時候t2已經鎖定了o2,同時t2也等待o1.這樣就出現了死鎖。他們誰也不會得到另乙個object。[/size][/color]

面試題的乙個例子:

public class testthread implements runnable 

public void m2()

@override

public void run() catch (exception e)

}public static void main(string args) throws exception

}

執行結果:

100b = 1000

[color=red][size=medium]從執行結果來看,m2方法被呼叫了。說明m1被鎖定了,但是執行緒可以訪問那些沒有被鎖定的方法。如果從m2改變b的值也是可以的。[/size][/color]

執行緒死鎖例子

標頭檔案 include include include include include pthread mutex t mutex one,mutex two pthread mutex t mutex pthread cond t cond void thread routine one voi...

Java 46 基於Java的多執行緒死鎖例子

2個人一起吃飯但是只有一雙筷子,2人輪流吃 同時擁有2只筷子才能吃 某乙個時候,乙個拿了左筷子,一人拿了右筷子,2個人都同時占用乙個資源,等待另乙個資源,這個時候甲在等待乙吃完並釋放它占有的筷子,同理,乙也在等待甲吃完並釋放它占有的筷子,這樣就陷入了乙個死迴圈,誰也無法繼續吃飯 產生死鎖原因是對同乙...

Java執行緒死鎖

需要避免的與多工處理有關的特殊錯誤型別是死鎖 deadlock 死鎖發生在當兩個執行緒對一對同步物件有迴圈依賴關係時。例如,假定乙個執行緒進入了物件x的管程而另乙個執行緒進入了物件y的管程。如果x的執行緒試圖呼叫y的同步方法,它將像預料的一樣被鎖定。而y的執行緒同樣希望呼叫x的一些同步方法,執行緒永...