91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java 中死鎖問題的實例詳解

發布時間:2020-10-03 13:36:09 來源:腳本之家 閱讀:146 作者:CC小觀 欄目:編程語言

java 中死鎖問題的實例詳解

先看代碼在做解釋

public class DeadLock implements Runnable{
  String a;
  String b;
  boolean flag;
  public DeadLock(String a,String b,boolean flag){
    this.a=a;
    this.b=b;
    this.flag=flag;
  }
  public void run(){
    if(flag){
//     while(true){
          synchronized(a){
            System.out.println("鎖a");
            synchronized(b){
              System.out.println("鎖b----");
            }
          }
//       }
    }else{
//   while(true){
        synchronized(b){
          System.out.println("鎖b");
          synchronized(a){
            System.out.println("鎖a----");
          }
        }
//     }
    }
  }

  public static void main(String[] args){
  String a=new String("a");
  String b=new String("b");
  DeadLock d1=new DeadLock(a,b,true);
  DeadLock d2=new DeadLock(a,b,false);
  Thread t1=new Thread(d1);
  Thread t2=new Thread(d2);
  t1.start();
  t2.start();
  System.out.println("歡聲笑語中打出GG");
  }

}

以上是代碼部分,如果沒有死鎖,可以在if下加while(true),必然死鎖,下面來做說明。

這個僅僅是為了理解死鎖和面試用的,創建兩個對象a和b只是為了作為死鎖的對象而用,線程t1運行(t1.start()),線程t1拿到鎖a后,需要繼續執行,拿到鎖b,而線程t2運行(t2.start()),拿到鎖b,想繼續拿到鎖a繼續執行,這就形成死鎖,互相持有對面所需要的鎖對象。

如果面試,可以簡單記下,兩個線程,兩個鎖對象,鎖互相嵌套,最少兩種狀態,同時執行,一次不行就多次,也可鎖外面加循環,讓線程多次運行,就會死鎖,因為運行一次,可能存在偶然,第一個線程執行完了,鎖對象釋放了,第二個線程才進來執行,如此就有偶然現象。

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

理塘县| 永福县| 澄迈县| 浪卡子县| 福海县| 潜山县| 郎溪县| 南溪县| 建德市| 林周县| 响水县| 岚皋县| 青岛市| 乌拉特后旗| 六枝特区| 巩义市| 富平县| 莱西市| 梁河县| 股票| 碌曲县| 泰来县| 敖汉旗| 绥芬河市| 柳江县| 清新县| 商河县| 章丘市| 九台市| 鄂托克前旗| 海南省| 上犹县| 通渭县| 南乐县| 台山市| 五莲县| 桃园市| 大足县| 黄山市| 榆中县| 郯城县|