Java 死鎖的簡單例項

2021-07-03 23:27:24 字數 1113 閱讀 5522

雖然網上有各種關於死鎖的說法,但是卻沒有乙個實際的案例來闡述這個死鎖到底是什麼樣的

那麼這裡有乙個簡單的死鎖例項:

執行緒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...