使用資源排序解決Java執行緒死鎖解決的方法

2021-08-31 16:52:34 字數 1365 閱讀 9425

經常看以前大學裡面的教材中的乙個解決執行緒死鎖的例子,其技術叫做"資源排序",但**只是一部分,我今天把它寫全,這裡的關鍵點是執行緒對各個物件加鎖順序一定得保持一致.

/**

* 此類輕易的解決了死鎖問題,其核心思想為 各執行緒按照順序依次對各物件加鎖,

* 假設有三個執行緒需要競爭三個資源,執行緒加鎖順序是 lock1,lock2,lock3,這個應該稱作為 "資源排序"

* * @author chase

* */

public class deadlocksolution catch (interruptedexception e) {}

synchronized (lock2) catch (interruptedexception e) {}

synchronized (lock3) catch (interruptedexception e) {}}}

}system.out.println("執行緒1執行完畢!");

} }class thread2 extends thread catch (interruptedexception e) {}

synchronized (lock2) catch (interruptedexception e) {}

synchronized (lock3) catch (interruptedexception e) {}}}

}system.out.println("執行緒2執行完畢!");

} }class thread3 extends thread catch (interruptedexception e) {}

synchronized (lock2) catch (interruptedexception e) {}

synchronized (lock3) catch (interruptedexception e) {}}}

}system.out.println("執行緒3執行完畢!");

} }public deadlocksolution()

public static void main(string args)

}

執行結果:

執行緒1已對 1資源 加鎖

執行緒1已對 2資源 加鎖

執行緒1已對 3資源 加鎖

執行緒1執行完畢!

執行緒3已對 1資源 加鎖

執行緒3已對 2資源 加鎖

執行緒3已對 3資源 加鎖

執行緒2已對 1資源 加鎖

執行緒3執行完畢!

執行緒2已對 2資源 加鎖

執行緒2已對 3資源 加鎖

執行緒2執行完畢! 

不同的機器執行緒執行的先後可能不太一樣,但是應該不會出現死鎖的情況.

執行緒同步(多執行緒協同使用有限資源)

1 互斥量 mutex 全域性變數 pthread mutex t m 定義互斥量 主函式 pthread mutex init m,null 初始化 操作 預設配置null pthread mutex destory m 登出 執行緒函式 pthread mutex lock m 加鎖 pthre...

java執行緒池使用

newcachedthreadpool newfixedthreadpool newscheduledthreadpool newsinglethreadexecutor 單例物件中的執行緒池使用 建立乙個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活 空閒執行緒,若無可 則新建執行緒 exe...

java多執行緒使用

首先說一下多執行緒的應用場景吧 eg 1 2 3 1億 最開始測試用的是1兆,但是超過了double的範圍,計算的資料不準確,用bigdecimal太麻煩了 如何快速運算出資料結果 常規演算法 public static void main string args system.out.printl...