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