最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java object wait notify notifyAll代碼解析

 更新時(shí)間:2020年11月18日 10:09:29   作者:dint  
這篇文章主要介紹了Java object wait notify notifyAll代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

測試代碼:

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..開始執(zhí)行wait...");
            loc.wait();
            System.out.println("["+sdf.format(new Date())+"] t1___loc..執(zhí)行wait后續(xù)...");
            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___進(jìn)入鎖...");
            Thread.sleep(5000);
            System.out.println("["+sdf.format(new Date())+"] t3___loc..開始 wait...");
            loc.wait();
            System.out.println("["+sdf.format(new Date())+"] t3___loc..執(zhí)行 wait后續(xù)...");
            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..開始執(zhí)行 notify...");
            loc.notify();
            System.out.println("["+sdf.format(new Date())+"] t2___loc..執(zhí)行 notify后續(xù)...");
            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....");
  }

執(zhí)行結(jié)果:

[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..開始執(zhí)行wait...

[16:56:04 392] t2___獲得鎖...
[16:56:09 392] t2___loc..開始執(zhí)行 notify...
[16:56:09 392] t2___loc..執(zhí)行 notify后續(xù)...
[16:56:10 392] t2___loc 離開鎖....


[16:56:10 392] t3___進(jìn)入鎖...
[16:56:15 392] t3___loc..開始 wait...
[16:56:15 392] t1___loc..執(zhí)行wait后續(xù)...
[16:56:16 392] t1___loc..離開鎖...
t2___before join ....
t3____before join ....

總結(jié):

1. 執(zhí)行wait后‘'暫時(shí)‘ 釋放當(dāng)前對象鎖給其他線程,當(dāng)前線程處于等待狀態(tài)

2. syn塊中的wait收到notify通知后 喚醒cpu 繼續(xù)判斷鎖狀態(tài)

3. 執(zhí)行notify且當(dāng)前的對象鎖釋放后 wait等待的線程激活

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

广饶县| 四子王旗| 濮阳县| 惠东县| 西青区| 江达县| 阜宁县| 浦县| 承德市| 顺昌县| 彝良县| 玉龙| 葫芦岛市| 渝中区| 铜山县| 洛阳市| 宁阳县| 庆安县| 江华| 乌什县| 萍乡市| 凌源市| 浦东新区| 平湖市| 隆化县| 桃江县| 南京市| 桓台县| 武山县| 苍山县| 石屏县| 建始县| 蒙阴县| 郴州市| 汕尾市| 从化市| 咸宁市| 贵定县| 磴口县| 育儿| 浑源县|