java線程同步——CountDownLatch

java.util.concurrent.CountDownLatch

CountDownLatch允許線程等待一組在其他線程中執行的操作完成之後才繼續執行

這個類通過指定一個整數初始化內部計數器,這個整數就是線程要等待完成的操作的數目

當一個線程要等待某些操作先執行時,需要調用await()方法讓線程進入休眠直到所有操作完成

當某一個操作完成的時候,它將調用countDown()方法使計數器減1

當計數器變爲0的時候,CountDownLatch將喚醒所有調用await()方法而進入休眠的線程


public class TestCountDownLatch implements Runnable {

    private final CountDownLatch countDownLatch = new CountDownLatch(10);

    @Override
    public void run() {
        try {
            //等待其他操作完成
            countDownLatch.await();
            //當計數器爲0
            System.out.println("all the other action have been done");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //完成其他操作
    public void doOtherThing() {
        //進行其他操作,並使計數器減1
        countDownLatch.countDown();
    }

}

使用場景:

1.視頻會議等待所有與會者到了纔開始

2.遊戲中等所有玩家進入準備狀態才能開始


Tips:

1.CountDownLatch機制不是用來保護共享資源或者臨界區的,而是用來同步執行多個任務的一個或者多個線程

2.CountDownLatch只能進入依次,當計數器爲0的時候將不再可用,只能新建一個CountDownLatch

發佈了39 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章