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

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

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

      Loading

      【線程基礎】Condition類的介紹與使用

      簡單介紹一下Condition,Condition是Java1.5開始出現的,其出現的目的就是為了替代傳統的Object的wait()、notify()實現線程間的協作。相比傳統的方式使用Condition的await()、signal()這種方式實現線程間協作更加安全和高效。

      常用方法介紹

      方法名 作用
      void await() 造成當前線程在接到信號或被中斷之前一直處于等待狀態。
      boolean await(long time, TimeUnit unit) 造成當前線程在接到信號、被中斷或到達指定等待時間之前一直處于等待狀態是否超時,超時異常
      signal() 喚醒一個等待線程。該線程從等待方法返回前必須獲得與Condition相關的鎖。
      signalAll() 喚醒所有等待線程。能夠從等待方法返回的線程必須獲得與Condition相關的鎖。
      awaitUninterruptibly() 造成當前線程在接到信號之前一直處于等待狀態。【注意:該方法對中斷不敏感】。
      awaitUntil(Date deadline) 造成當前線程在接到信號、被中斷或到達指定最后期限之前一直處于等待狀態。如果沒有到指定時間就被通知,則返回true,否則表示到了指定時間,返回返回false。
      awaitNanos(long nanosTimeout) 造成當前線程在接到信號、被中斷或到達指定等待時間之前一直處于等待狀態。返回值表示剩余時間,如果在nanosTimesout之前喚醒,那么返回值 = nanosTimeout - 消耗時間,如果返回值 <= 0 ,則可以認定它已經超時了。

      示例代碼

      public class LockConditionTest {
      
          private static Lock lock = new ReentrantLock();
      
          public static void main(String[] args) throws InterruptedException {
              Condition condition = lock.newCondition();
      
              Thread thread0 = new Thread(()->{
                  lock.lock();
                  System.out.println(Thread.currentThread().getName()+"鎖上了");
                  try {
                      System.out.println(Thread.currentThread().getName()+"我要開始讓出鎖了...");
                      condition.await();
                      System.out.println(Thread.currentThread().getName()+"我又被喚醒了...");
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
                  lock.unlock();
                  System.out.println(Thread.currentThread().getName()+"解鎖了");
              });
      
              Thread thread1 = new Thread(()->{
                  lock.lock();
                  System.out.println(Thread.currentThread().getName()+"鎖上了");
                  System.out.println("我要開始喚醒condition了");
                  condition.signal();
                  System.out.println("condition被我喚醒了");
                  lock.unlock();
                  System.out.println(Thread.currentThread().getName()+"解鎖了");
              });
      
              System.out.println("啟動等待線程");
              thread0.start();
              TimeUnit.SECONDS.sleep(1);
              System.out.println("啟動喚醒線程");
              thread1.start();
          }
      }
      
      

      輸出結果如下

      啟動等待線程
      Thread-0鎖上了
      Thread-0我要開始讓出鎖了...
      啟動喚醒線程
      Thread-1鎖上了
      我要開始喚醒condition了
      condition被我喚醒了
      Thread-1解鎖了
      Thread-0我又被喚醒了...
      Thread-0解鎖了
      

      從上面的代碼和執行結果我們可以看到,其實Condition的await和signal就是線程中wait和notify的作用,并且他們也有一個相同的特性,就是必須加上鎖,也就是lock,加鎖的好處就是為了能讓線程可以按照自己制定的任務順序的邏輯來執行,這樣就保證了線程的安全性。

      posted @ 2022-01-24 19:41  鄧小白  閱讀(234)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 波多野结av在线无码中文免费| 精品无码久久久久久尤物| 成年黄页网站大全免费无码| 影音先锋啪啪av资源网站| 中文字幕午夜福利片午夜福利片97| 最新国产AV最新国产在钱| 日本高清中文字幕免费一区二区| 久久国产精品老人性| 永久免费精品性爱网站| 无套内谢少妇一二三四| 熟女人妻aⅴ一区二区三区电影| 国产一区二区高潮视频| 一卡二卡三卡四卡视频区| 狠狠色丁香婷婷综合尤物| 国产啪视频免费观看视频| 基隆市| 深夜免费av在线观看| 久久综合伊人77777| 国产95在线 | 欧美| 女同精品女同系列在线观看| 亚洲欧美综合中文| 少妇无码一区二区三区免费 | 亚洲精国产一区二区三区| 久久精品国产亚洲av天海翼 | 久久这里有精品国产电影网| 国产精品爆乳奶水无码视频免费| 国产一区二区三区黄网| 一本色道久久东京热| 国产自在自线午夜精品| 欧美va亚洲va在线观看| 好爽毛片一区二区三区四| 国产精品七七在线播放| 成年在线观看免费人视频| 国产成人一区二区不卡| 亚洲丰满老熟女激情av| 亚洲av永久无码精品水牛影视| 中文字幕精品人妻丝袜| 国产福利视频区一区二区| 国产成人精品无码一区二区| 天堂亚洲免费视频| 久久国产精品色av免费看|