中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

CountDownLatch的理解和使用

小億
69
2024-01-10 16:43:06
欄目: 編程語言

CountDownLatch是Java中的一個并發工具類,用于實現線程等待的功能。它可以讓一個或多個線程等待其他線程的操作完成后再繼續執行。

CountDownLatch使用一個計數器來實現等待。計數器的初始值可以設置為一個正整數,當一個線程執行完自己的任務后,計數器的值減1。當計數器的值變為0時,所有等待的線程將被釋放,可以繼續執行。

CountDownLatch的主要方法包括:

  • CountDownLatch(int count):構造方法,設置計數器的初始值。
  • void await():使當前線程等待,直到計數器的值變為0。
  • void countDown():計數器的值減1。

下面是一個使用CountDownLatch的示例:

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch latch = new CountDownLatch(3);  // 設置計數器的初始值為3

        Worker worker1 = new Worker(latch, "Worker1");
        Worker worker2 = new Worker(latch, "Worker2");
        Worker worker3 = new Worker(latch, "Worker3");

        worker1.start();
        worker2.start();
        worker3.start();

        latch.await();  // 等待所有線程執行完畢

        System.out.println("All workers have finished their tasks.");
    }
}

class Worker extends Thread {
    private CountDownLatch latch;

    public Worker(CountDownLatch latch, String name) {
        super(name);
        this.latch = latch;
    }

    public void run() {
        try {
            Thread.sleep(1000);  // 模擬任務執行時間
            System.out.println(getName() + " has finished its task.");
            latch.countDown();  // 計數器的值減1
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我們創建了一個CountDownLatch對象,并將其初始值設置為3。然后創建了三個Worker線程,并讓它們執行任務。每個Worker線程執行完任務后,都會調用countDown()方法將計數器的值減1。主線程調用await()方法等待計數器的值變為0,即所有Worker線程都執行完任務后,主線程才會繼續執行。

注意:CountDownLatch的計數器是一次性的,一旦計數器的值變為0,就無法重置為其他值。如果需要多次使用計數器,可以考慮使用CyclicBarrier類。

0
克拉玛依市| 余干县| 丹江口市| 满洲里市| 增城市| 定兴县| 花垣县| 会昌县| 固镇县| 巍山| 定边县| 井研县| 甘洛县| 额尔古纳市| 高密市| 泰宁县| 阿坝| 鄂伦春自治旗| 新巴尔虎左旗| 谢通门县| 翁源县| 梁平县| 丹寨县| 壶关县| 黑龙江省| 沂南县| 阜阳市| 五河县| 虞城县| 西峡县| 金沙县| 新邵县| 贵溪市| 五大连池市| 湖口县| 黑河市| 邯郸市| 织金县| 仪征市| 水富县| 伊春市|