<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      為什么wait()、notify()方法需要和synchronized一起使用

      提示:更多優秀博文請移步博主的GitHub倉庫:GitHub學習筆記Gitee學習筆記

      Obj.wait()與Obj.notify()必須要與synchronized(Obj)一起使用,也就是wait,與notify必須通過獲取的鎖對象進行調用**,從語法角度來說就是Obj.wait(),Obj.notify必須在synchronized(Obj){…}語句塊內。從功能上來說wait就是說線程在獲取對象鎖后,主動釋放對象鎖,同時本線程休眠。直到有其它線程調用對象的notify()喚醒該線程,才能繼續獲取對象鎖,并繼續執行。相應的notify()就是對對象鎖的喚醒操作。

      1. 不一起使用導致的后果

      public class Haha {
          public Map<String,String> map=new HashMap<>();
          public void haha() throws InterruptedException {
              synchronized (map){//使用map加鎖
                  System.out.println("haha method is run");
                  this.wait();//用當前對象,調用wait方法會報錯;正確的寫法是map.wait()
              }
          }
      }
      
      public class Test {
          public static void main(String[] args) {
              new Thread(()->{
                  try {
                      new Haha().haha();
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }).start();
          }
      }
      

      在上述代碼中由于Haha類的haha方法中使用map加的鎖,但又試圖使用this.wait方法釋放鎖此時會報錯:

      [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PMmhumDw-1585273461081)(…/images/7.png)]

      2. 為什么要在一起使用

      Object.wait(),Object.notify(),Object.notifyAll()都是Object的方法,換句話說,就是每個類里面都有這些方法。

      • Object.wait():釋放當前對象鎖,并進入阻塞隊列
      • Object.notify():喚醒當前對象阻塞隊列里的任一線程(并不保證喚醒哪一個)
      • Object.notifyAll():喚醒當前對象阻塞隊列里的所有線程

      為什么這三個方法要與synchronized一起使用呢?解釋這個問題之前,我們先要了解幾個知識點

      • 每一個對象都有一個與之對應的監視器
      • 每一個監視器里面都有一個該對象的鎖以及一個等待隊列和一個同步隊列

      wait()方法的語義有兩個,一是釋放當前對象鎖,另一個是進入阻塞隊列,可以看到,這些操作都是與監視器相關的,當然要指定一個監視器才能完成這個操作了

      notify()方法也是一樣的,用來喚醒一個線程,你要去喚醒,首先你得知道他在哪兒,所以必須先找到該對象,也就是獲取該對象的鎖,當獲取到該對象的鎖之后,才能去該對象的對應的等待隊列去喚醒一個線程。值得注意的是,只有當執行喚醒工作的線程離開同步塊,即釋放鎖之后,被喚醒線程才能去競爭鎖。

      因wait()而導致阻塞的線程是放在阻塞隊列中的,因競爭失敗導致的阻塞是放在同步隊列中的,notify()/notifyAll()實質上是把阻塞隊列中的線程放到同步隊列中去

      為了便于理解,你可以把線程想象成一個個列車,對象想象成車站,每一個車站每一次能跑一班車,這樣理解起來就比較容易了。

      值得提的一點是,synchronized是一個非公平的鎖,如果競爭激烈的話,可能導致某些線程一直得不到執行。

      參考文章:https://blog.csdn.net/qq_39907763/article/details/79301813

      posted @ 2020-03-27 09:45  聽到微笑  閱讀(11)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 国产精品伦人视频免费看| 日本中文一区二区三区亚洲| 亚洲国产中文字幕精品| 日韩大片高清播放器| 国产精品国产三级国快看| 成人视频在线观看| 精品久久丝袜熟女一二三| 一区二区中文字幕av| 亚洲一区二区经典在线播放| 中文字幕在线精品视频入口一区| 成人午夜大片免费看爽爽爽| 国产国产成人精品久久蜜| 综合欧美视频一区二区三区| 92精品国产自产在线观看481页| 亚洲一区二区中文av| 丰满少妇在线观看网站| 亚洲免费观看一区二区三区| 国产国产午夜福利视频| 免费吃奶摸下激烈视频| 精品人妻午夜一区二区三区四区| 成人一区二区不卡国产| 庐江县| 国产精品亚洲专区无码导航| 久久这里精品国产99丫E6| 沾益县| 国产精品人妻熟女男人的天堂| 国色精品卡一卡2卡3卡4卡在线 | 欧美精品国产综合久久| www插插插无码免费视频网站| 国产原创自拍三级在线观看| 激情综合网五月婷婷| 人妻系列中文字幕精品| 国产亚洲色视频在线| 泽普县| 人人妻人人做人人爽夜欢视频| 午夜精品国产自在| mm1313亚洲国产精品| 亚洲成亚洲成网中文字幕| 国产欧美亚洲精品a| 国产精品亚洲一区二区三区| 日本一道一区二区视频|