您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在java中實現死鎖,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
死鎖
只有當t1線程占用o1且正好也需要o2,t2此時占用o2且正好也需要o1的時候才會出現死鎖,(類似于2個人拿著兩個筷子吃飯,都是需要對方的一根筷子才能吃)
以下代碼t1線程占用o1,并且獲取到o2對象后才會釋放o1,而t2線程先占用o2又去獲取o1,而此時的o1被t1線程占用,o2被t2線程占用,t1和t2都在無限等待,就會出現死鎖。
package javasimple; /** * 死鎖demo * @author haokui * */ public class DieSynchronized { public static void main(String[] args) { /** * 創建并啟動兩個線程t1、t2。兩個線程都要共享o1、o2兩個對象 */ Object o1 = new Object(); Object o2 = new Object(); Thread t1 = new Thread(new T1(o1,o2)); Thread t2 = new Thread(new T2(o1,o2)); t1.start(); t2.start(); } } //創建兩個線程類 class T1 implements Runnable { Object o1; Object o2; public T1(Object o1, Object o2){ this.o1 = o1; this.o2 = o2; } public void run() { //鎖o1和o2 synchronized (o1) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (o2) { System.out.println("o2"); } } } } class T2 implements Runnable { Object o1; Object o2; public T2(Object o1, Object o2){ this.o1 = o1; this.o2 = o2; } public void run() { synchronized (o2) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (o1) { System.out.println("o1"); } } } }
關于怎么在java中實現死鎖就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。