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

溫馨提示×

溫馨提示×

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

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

深入淺析Java項目中的object wait notify notifyAll

發布時間:2020-11-19 15:20:07 來源:億速云 閱讀:214 作者:Leah 欄目:開發技術

深入淺析Java項目中的object wait notify notifyAll?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

測試代碼:

public static Object loc=new Object();

  public static void main(String[] args) throws Exception{

    Thread t1=new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          java.text.SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss SSS");
          System.out.println("["+sdf.format(new Date())+"] t1___等待鎖...");
          synchronized (loc) {
            System.out.println("["+sdf.format(new Date())+"] t1___獲得鎖 ...");
            Thread.sleep(5000);
            System.out.println("["+sdf.format(new Date())+"] t1___loc..開始執行wait...");
            loc.wait();
            System.out.println("["+sdf.format(new Date())+"] t1___loc..執行wait后續...");
            Thread.sleep(1000);
          }
          System.out.println("["+sdf.format(new Date())+"] t1___loc..離開鎖...");
        }catch (Exception e){
          e.printStackTrace();
        }
      }
    });
    Thread t3=new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          java.text.SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss SSS");
          System.out.println("["+sdf.format(new Date())+"] t3___等待鎖...");
          synchronized (loc) {
            System.out.println("["+sdf.format(new Date())+"] t3___進入鎖...");
            Thread.sleep(5000);
            System.out.println("["+sdf.format(new Date())+"] t3___loc..開始 wait...");
            loc.wait();
            System.out.println("["+sdf.format(new Date())+"] t3___loc..執行 wait后續...");
            Thread.sleep(1000);
          }
          System.out.println("["+sdf.format(new Date())+"] t3___離開鎖...");
        }catch (Exception e){
          e.printStackTrace();
        }
      }
    });

    Thread t2=new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          java.text.SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss SSS");
          System.out.println("["+sdf.format(new Date())+"] t2___等待鎖...");
          synchronized (loc) {
            System.out.println("["+sdf.format(new Date())+"] t2___獲得鎖...");
            Thread.sleep(5000);
            System.out.println("["+sdf.format(new Date())+"] t2___loc..開始執行 notify...");
            loc.notify();
            System.out.println("["+sdf.format(new Date())+"] t2___loc..執行 notify后續...");
            Thread.sleep(1000);
          }
          System.out.println("["+sdf.format(new Date())+"] t2___loc 離開鎖....");
        }catch (Exception e){
          e.printStackTrace();
        }
      }
    });
    t1.start();
    t3.start();
    Thread.sleep(500);
    t2.start();


    System.out.println("t1___before join ....");
    t1.join();
    System.out.println("t2___before join ....");
    t2.join();
    System.out.println("t3____before join ....");
    t3.join();
    System.out.println("main exit....");
  }

執行結果:

[16:55:59 384] t1___等待鎖...

[16:55:59 384] t1___獲得鎖 ...

[16:55:59 384] t3___等待鎖...
t1___before join ....
[16:55:59 836] t2___等待鎖...
[16:56:04 392] t1___loc..開始執行wait...

[16:56:04 392] t2___獲得鎖...
[16:56:09 392] t2___loc..開始執行 notify...
[16:56:09 392] t2___loc..執行 notify后續...
[16:56:10 392] t2___loc 離開鎖....


[16:56:10 392] t3___進入鎖...
[16:56:15 392] t3___loc..開始 wait...
[16:56:15 392] t1___loc..執行wait后續...
[16:56:16 392] t1___loc..離開鎖...
t2___before join ....
t3____before join ....

總結:

1. 執行wait后‘'暫時‘ 釋放當前對象鎖給其他線程,當前線程處于等待狀態

2. syn塊中的wait收到notify通知后 喚醒cpu 繼續判斷鎖狀態

3. 執行notify且當前的對象鎖釋放后 wait等待的線程激活

4. notifyAll 是一次喚醒所有的wait

關于深入淺析Java項目中的object wait notify notifyAll問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

凤山县| 胶州市| 宁波市| 手游| 若尔盖县| 庆云县| 保康县| 依兰县| 司法| 鹤山市| 安乡县| 通州市| 尼勒克县| 南平市| 永德县| 太和县| 临高县| 无锡市| 浪卡子县| 舒城县| 象山县| 深圳市| 永寿县| 安图县| 潢川县| 夏邑县| 新民市| 晋城| 集贤县| 佛教| 礼泉县| 东方市| 建湖县| 新宾| 巴东县| 清丰县| 沁源县| 宁远县| 乌兰浩特市| 贞丰县| 六安市|