在Java中,CountDownLatch是一個同步輔助類,它可以讓一個或多個線程等待其他線程完成操作后再繼續執行。CountDownLatch可以用于以下場景:
主線程等待多個子線程完成后再執行。
多個子線程等待主線程完成某個任務后再開始執行。
CountDownLatch的使用步驟如下:
創建一個CountDownLatch對象,指定需要等待的線程數量。
在需要等待的線程中,調用CountDownLatch的await()方法,使線程進入等待狀態,直到計數器減為0。
在其他線程執行完需要等待的任務后,調用CountDownLatch的countDown()方法,將計數器減1。
如果主線程需要等待其他線程完成后再執行,可以在主線程中調用CountDownLatch的await()方法,使主線程進入等待狀態。
當計數器減到0時,所有等待的線程將被喚醒,繼續執行。
下面是一個簡單的示例代碼:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) {
int threadCount = 5;
CountDownLatch latch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
Thread thread = new Thread(new WorkerThread(latch));
thread.start();
}
try {
latch.await(); // 主線程等待所有子線程執行完畢
System.out.println("All threads have finished.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class WorkerThread implements Runnable {
private CountDownLatch latch;
public WorkerThread(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 執行需要等待的任務
System.out.println("Thread " + Thread.currentThread().getName() + " is running.");
// 任務執行完畢后,調用countDown()方法將計數器減1
latch.countDown();
}
}
在上面的示例代碼中,主線程創建了5個WorkerThread線程,并將CountDownLatch對象作為參數傳遞給它們。每個WorkerThread線程執行完任務后,調用latch.countDown()方法將計數器減1。主線程調用latch.await()方法進入等待狀態,直到計數器減為0,所有子線程執行完成。最后,主線程輸出"All threads have finished."。