雖然網上有各種關於死鎖的說法,但是卻沒有乙個實際的案例來闡述這個死鎖到底是什麼樣的
那麼這裡有乙個簡單的死鎖例項:
執行緒t1需要先使用掃瞄器掃瞄檔案、再使用印表機列印檔案,之後工作完畢
執行緒t2需要先使用印表機列印檔案、再使用掃瞄器掃瞄檔案,之後工作完畢
如果是正常的工作秩序,那應該是t1先擁有掃瞄器的使用權,而t2呢則擁有印表機的使用權,此時則大家秩序井然的工作直至工作完畢
但死鎖往往是發生在一些意外的情況,如t1要先掃瞄檔案但卻擁有了印表機的使用許可權,而沒有掃瞄器的使用許可權,t2則相反,此時大家都在等待對方使用完成後,讓出使用許可權,這樣無限制的等待下去,就造成了我們所謂的「死鎖」
ps:這裡不同的排程方式,結果也會不同。例如使用權都是t1,或都是t2等
**如下:
public class test implements runnable
public static void main(string args)
@override
public void run()
}else
try catch (interruptedexception e)
//通知等待使用掃瞄器的執行緒,現在印表機可以使用了
scanner.notifyall();
}synchronized (printer)
//通知等待使用印表機的執行緒,現在印表機可以使用了
printer.notifyall();}}
}}.start();
new thread("t2")
}else
try catch (interruptedexception e)
//通知等待使用印表機的執行緒,現在印表機可以使用了
printer.notifyall();
}synchronized (scanner)
//通知等待使用掃瞄器的執行緒,現在印表機可以使用了
scanner.notifyall();}}
}}.start();
}static class scanner
}static class printer
}}
java死鎖例項
在實際程式設計中,要盡量避免出現死鎖的情況,但是讓你故意寫乙個死鎖的程式時似乎也不太簡單,以下是乙個簡單的死鎖例子。package dhp.test1 author 鄧海波 當類的物件flag 1時 t1 先鎖定o1,睡眠500毫秒,然後鎖定o2 而t1在睡眠的時候另乙個flag 0的物件 t2 執...
Java死鎖例項
併發程式設計是指多個執行緒同時進行,對同一資源進行操作,那麼就會產生併發問題。如何解決?可以用鎖。synchronized是最常用的,但是有時難免會出現死鎖的現象。下面就以乙個例項講解死鎖的過程 假定有乙個分布式微博工具,下面是其後台 在她的propagateupdate 方法被呼叫時,exampl...
java 死鎖簡單理解
public class deadlock catch interruptedexception e synchronized resource2 thread thread2 new thread catch interruptedexception e synchronized resource...