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

溫馨提示×

溫馨提示×

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

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

Jav中CountDownLatch是什么

發布時間:2020-07-02 14:35:37 來源:億速云 閱讀:217 作者:清晨 欄目:開發技術

小編給大家分享一下Jav中CountDownLatch是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!

CountDownLatch 是一個非常實用的多線程控制工具類。” Count Down ” 在英文中意為倒計數, Latch 為門問的意思。如果翻譯成為倒計數門閥, 我想大家都會覺得不知所云吧! 因此,這里簡單地稱之為倒計數器。在這里, 門問的含義是:把門鎖起來,不讓里面的線程跑出來。因此,這個工具通常用來控制線程等待,它可以讓某一個線程等待直到倒計時結束, 再開始執行。

CountDown Latch 的構造函數接收一個整數作為參數,即當前這個計數器的計數個數。

public CountDownLatch(int count)

CountDownLatch是一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。一個CountDownLatch初始化為給定的計數 。 調用await方法阻塞,直到當前計數為零,在調用countDown()方法之后,所有等待的線程被釋放,任何后續調用await立即返回。 這是一次性的現象 - 計數不能重置。 如果需要重置計數,考慮使用CyclicBarrier ,CyclicBarrier的計數器可以被重置后使用,因此它被稱為是循環的barrier。

主要方法:

// 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷。
void await()
// 使當前線程在鎖存器倒計數至零之前一直等待,除非線程被中斷或超出了指定的等待時間。
boolean await(long timeout, TimeUnit unit)
// 遞減鎖存器的計數,如果計數到達零,則釋放所有等待的線程。
void countDown()
// 返回當前計數。
long getCount()

我們來看一個例子:

public class TestCountDownLatch {
  private static final int RUNNER_NUMBER = 5; // 運動員個數
  private static final Random RANDOM = new Random();
  public static void main(String[] args) {
    // 用于判斷發令之前運動員是否已經完全進入準備狀態,需要等待5個運動員,所以參數為5
    CountDownLatch readyLatch = new CountDownLatch(RUNNER_NUMBER);
    // 用于判斷裁判是否已經發令,只需要等待一個裁判,所以參數為1
    CountDownLatch startLatch = new CountDownLatch(1);
    for (int i = 0; i < RUNNER_NUMBER; i++) {
      Thread t = new Thread(new Runner((i + 1) + "號運動員", readyLatch, startLatch));
      t.start();
    }
    try {
      readyLatch.await();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    startLatch.countDown();
    System.out.println("裁判:所有運動員準備完畢,開始...");
  }
  static class Runner implements Runnable {
    private CountDownLatch readyLatch;
    private CountDownLatch startLatch;
    private String name;
    public Runner(String name, CountDownLatch readyLatch, CountDownLatch startLatch) {
      this.name = name;
      this.readyLatch = readyLatch;
      this.startLatch = startLatch;
    }
    public void run() {
      int readyTime = RANDOM.nextInt(1000);
      System.out.println(name + ":我需要" + readyTime + "秒時間準備.");
      try {
        Thread.sleep(readyTime);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.println(name + ":我已經準備完畢.");
      readyLatch.countDown();
      try {
        startLatch.await(); // 等待裁判發開始命令
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.println(name + ":開跑...");
    }
  }
}

打印結果:

1號運動員:我需要547秒時間準備.
2號運動員:我需要281秒時間準備.
4號運動員:我需要563秒時間準備.
5號運動員:我需要916秒時間準備.
3號運動員:我需要461秒時間準備.
2號運動員:我已經準備完畢.
3號運動員:我已經準備完畢.
1號運動員:我已經準備完畢.
4號運動員:我已經準備完畢.
5號運動員:我已經準備完畢.
裁判:所有運動員準備完畢,開始...
3號運動員:開跑...
2號運動員:開跑...
1號運動員:開跑...
4號運動員:開跑...
5號運動員:開跑...

Process finished with exit code 0

注意:計數器必須大于等于0,只是等于0時候,計數器就是零,調用await方法時不會阻塞當前線程。

看完了這篇文章,相信你對Jav中CountDownLatch是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

庆城县| 阳朔县| 克什克腾旗| 绵阳市| 天柱县| 白山市| 灵宝市| 禄劝| 锡林浩特市| 南召县| 绵竹市| 石阡县| 灵宝市| 玉门市| 谷城县| 新乡市| 滨州市| 富阳市| 平潭县| 孙吴县| 嵊州市| 深圳市| 甘泉县| 山西省| 濉溪县| 桃园市| 特克斯县| 星子县| 黎川县| 玛沁县| 厦门市| 荔波县| 新竹县| 洮南市| 探索| 莱州市| 昭苏县| 海安县| 襄汾县| 双柏县| 白银市|