1.進程死鎖及解決方法
一、要點提示
(1) 掌握死鎖的概念和產生死鎖的根本原因。
(2) 理解產生死鎖的必要條件--以下四個條件同時具備:互斥條件、不可搶佔條件、佔有且申請條件、循環等待條件。
(3) 記得解決死鎖的一般方法,掌握死鎖的預防和死鎖的避免二者的基本思想。
(4) 掌握死鎖的預防策略中資源有順序分配策略。
(5) 瞭解進程安全序列的概念,瞭解死鎖與安全序列的關係。
(6) 了解銀行家演算法。
(7) 了解資源分配圖。
(8) 了解死鎖的偵測及恢復的想法。
2.關於死鎖,我個人的理解:
經過一段時間的學習,我理解的死鎖概念就是,例如有兩段進程,每一個進程中都被兩把鎖(鎖1、鎖2),鎖著。不同的是,在兩段進程中,鎖的應用位置不同。從而產生了,一個進程的完整啟動,內部需要一把鎖,而這把鎖又恰好在另一個進程那裡。另一個行程想要完整啟動(或執行)內部所需要的那把鎖又在另一個程式裡。這樣互相牽絆著,都處於準備狀態卻無法向下執行。造成了死鎖狀態。我根據理解畫了示意圖:
public class Test15 {public static void main(String[] args) throws InterruptedException {new Thread(new DeadLockThread(true)).start();//Thread.sleep(10);在中间用上它可以使结果交替出现,我是为了看死锁的效果,用它对比一下。new Thread(new DeadLockThread(false)).start(); } }class DeadLockThread implements Runnable {static Object o1 = new Object();static Object o2 = new Object();private boolean flag; DeadLockThread(boolean flag) {this.flag = flag; }public void run() {if (flag == true) {while (true) {synchronized (o1) { System.out.println("这是锁o1");synchronized (o2) { System.out.println("这是锁o2"); }
列印結果:
以上是Java中死鎖的概念及解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!