An example for dead lock:
package com.way.threads;public class DeadLock { public static void main(String[] args) throws InterruptedException{ Object obj1=new Object(); Object obj2=new Object(); Object obj3=new Object(); Thread t1=new Thread(new SyncThread(obj1,obj2),"thread1"); Thread t2=new Thread(new SyncThread(obj2,obj3),"thread2"); Thread t3=new Thread(new SyncThread(obj3,obj1),"thread3"); t1.start(); Thread.sleep(5000); t2.start(); Thread.sleep(5000); t3.start(); }}class SyncThread implements Runnable{ Object obj1; Object obj2; public SyncThread(Object obj1,Object obj2){ this.obj1=obj1; this.obj2=obj2; } public void run(){ String name=Thread.currentThread().getName(); System.out.Output:thread1 begin to runthread1 is using java.lang.Object@1aeb83aethread1 want java.lang.Object@142c6e83thread2 begin to runthread2 is using java.lang.Object@142c6e83thread2 want java.lang.Object@22896964thread3 begin to runthread3 is using java.lang.Object@22896964thread3 want java.lang.Object@1aeb83aeObviously, threads have been locked by each other. This is Dead Lock.
什么是死鎖? 如果一個進程集合里面的每個進程都在等待這個集合中的其他一個進程(包括自身)才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處于死鎖狀態的進程稱為死鎖進程
產生死鎖的四個必要條件: (1) 互斥條件:一個資源每次只能被一個進程使用。 (2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。 (3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。 (4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系
處理死鎖的基本方法:
1.預防死鎖:通過設置一些限制條件,去破壞產生死鎖的必要條件 2.避免死鎖:在資源分配過程中,使用某種方法避免系統進入不安全的狀態,從而避免發生死鎖 3.檢測死鎖:允許死鎖的發生,但是通過系統的檢測之后,采取一些措施,將死鎖清除掉 4.解除死鎖:該方法與檢測死鎖配合使用
具體措施:
避免嵌套封鎖:這是死鎖最主要的原因的,如果你已經有一個資源了就要避免封鎖另一個資源。如果你運行時只有一個對象封鎖,那是幾乎不可能出現一個死鎖局面的。例如,這里是另一個運行中沒有嵌套封鎖的run()方法,而且程序運行沒有死鎖局面,運行得很成功。
盡可能減少封鎖對象的數量和封鎖時間:只對想要運行的資源獲取封鎖,比如封鎖對象的特定屬性而不是整個對象。減少封鎖時間:如果一個線程要取得某一資源并封鎖后,盡快完成這個資源相關的操作并及時釋放。
調整資源占有順序:類如最經典的哲學家吃飯問題,所有人都先拿左筷子后拿右筷子,如果其中一個反過來,思索概率就會降低。
設置最長等待:如果兩個線程正在等待對象結束,無限期的使用線程加入,如果你的線程必須要等待另一個線程的結束,若是等待進程的結束加入最好準備最長時間。在java.util.concurrent庫中有相關支持
其他閱讀資料: http://www.importnew.com/9668.html http://www.cnblogs.com/jijiji/p/4855581.html http://blog.csdn.net/defonds/article/details/44021605/#t77 http://ifeve.com/java-concurrency-thread-directory/ 《Java編程思想》
新聞熱點
疑難解答