在編寫多執行緒程式時,必須注意資源的使用問題。如果兩個執行緒(多個執行緒時情況類似)分別擁有不同的資源,而同時又需要對方釋放資源才能繼續執行時,就會發生死鎖。本例項演示了一種解決死鎖的方式,例項執行效果如圖
編寫類deadlock,該類實現了
runnable
介面。在
run()
方法中,由於去掉了乙個同步塊而解決了執行緒的死鎖問題。**如下:
package com.mingrisoft.thread;心法領悟public class deadlock implements runnable catch (interruptedexception e)
system.out.println(threadname + "進入同步塊o1準備進入o2");// 顯示進入o1塊
system.out.println(threadname + "已經進入同步塊o2");// 顯示進入o2塊
}if (flag == false) catch (interruptedexception e)
system.out.println(threadname + "進入同步塊o2準備進入o1");// 顯示進入o2塊
synchronized (o1) }}
}}public static void main(string args)
}
:解決死鎖的方法。
當具備以下4個條件時,就會產生死鎖:資源互斥(資源只能供乙個執行緒使用)、請求保持(擁有資源的執行緒在請求新的資源又不釋放占有的資源)、不能剝奪(已經獲得的資源在使用完成前不能剝奪)和迴圈等待(各個執行緒對資源的需求構成乙個迴圈)。通常破壞迴圈等待是最有效的方法。
執行緒死鎖問題
所謂死鎖是指多個執行緒因競爭資源而造成的一種僵局,多個執行緒被無限的阻塞,執行緒之間相互等待所需的資源,若無外力作用,這些程序都將無法向前推進。死鎖的產生,通常是下面的兩種情況 1.如果執行緒試圖對同乙個互斥量加鎖兩次,那麼它自身就會陷入死鎖狀態,使用互斥量時,2.如果程式使用多個互斥量時,如果允許...
c 多執行緒解決死鎖問題
可使用 monitor.tryenter 方法。雖然這種方法可以解決死鎖問題,但是最好還是不要出現死鎖這種情況。如果出現死鎖這種情況,就說明 有問題啊。還是在else裡面加個日誌記錄下吧,然後再解決。以下 來自網際網路 class program else new thread locktoomuc...
執行緒中買家賣家解決死鎖問題
商家拿出 phonename this phonename phonename bool false 賦值false,表示當前商家已經拿出手機,喚醒買家 this notify 將當前物件喚醒 public synchronized void buyer catch interruptedexcep...