CountDownLatch
是 Java 并發編程中的一個同步工具類,它允許一個或多個線程等待直到一組操作完成
CountDownLatch
實例時,需要指定一個初始計數。這個計數表示需要等待的操作數量。例如,如果需要等待 5 個線程完成任務,那么計數器的初始值應為 5。int count = 5;
CountDownLatch latch = new CountDownLatch(count);
await()
方法等待:在線程中,可以使用 await()
方法來阻塞當前線程,直到計數器減至 0。調用 await()
方法時,當前線程會釋放鎖資源,讓其他線程繼續執行。當計數器減至 0 時,當前線程會被喚醒并繼續執行。latch.await();
countDown()
方法減少計數器:當某個操作完成時,需要調用 countDown()
方法來減少計數器。這個方法應由完成操作的線程調用。每次調用 countDown()
方法,計數器都會減 1。當計數器減至 0 時,所有等待的線程都會被喚醒。latch.countDown();
CountDownLatch
是線程安全的,但在多線程環境下,需要確保正確使用同步機制,避免出現競態條件。CountDownLatch
一旦計數器減至 0,就不能再重置。如果需要重新使用 CountDownLatch
,需要創建一個新的實例。CountDownLatch
不支持超時機制。如果需要等待一段時間,可以考慮使用 Semaphore
或 Future
等其他同步工具類。CyclicBarrier
或 Phaser
等更高級的同步工具類,它們提供了更多的功能和靈活性。