溫馨提示×

JAVA中CountDownLatch怎么使用

小億
101
2023-09-12 11:50:43
欄目: 編程語言

在Java中,CountDownLatch是一個(gè)同步輔助類,它可以讓一個(gè)或多個(gè)線程等待其他線程完成操作后再繼續(xù)執(zhí)行。CountDownLatch可以用于以下場景:

  1. 主線程等待多個(gè)子線程完成后再執(zhí)行。

  2. 多個(gè)子線程等待主線程完成某個(gè)任務(wù)后再開始執(zhí)行。

CountDownLatch的使用步驟如下:

  1. 創(chuàng)建一個(gè)CountDownLatch對象,指定需要等待的線程數(shù)量。

  2. 在需要等待的線程中,調(diào)用CountDownLatch的await()方法,使線程進(jìn)入等待狀態(tài),直到計(jì)數(shù)器減為0。

  3. 在其他線程執(zhí)行完需要等待的任務(wù)后,調(diào)用CountDownLatch的countDown()方法,將計(jì)數(shù)器減1。

  4. 如果主線程需要等待其他線程完成后再執(zhí)行,可以在主線程中調(diào)用CountDownLatch的await()方法,使主線程進(jìn)入等待狀態(tài)。

  5. 當(dāng)計(jì)數(shù)器減到0時(shí),所有等待的線程將被喚醒,繼續(xù)執(zhí)行。

下面是一個(gè)簡單的示例代碼:

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(); // 主線程等待所有子線程執(zhí)行完畢
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() {
// 執(zhí)行需要等待的任務(wù)
System.out.println("Thread " + Thread.currentThread().getName() + " is running.");
// 任務(wù)執(zhí)行完畢后,調(diào)用countDown()方法將計(jì)數(shù)器減1
latch.countDown();
}
}

在上面的示例代碼中,主線程創(chuàng)建了5個(gè)WorkerThread線程,并將CountDownLatch對象作為參數(shù)傳遞給它們。每個(gè)WorkerThread線程執(zhí)行完任務(wù)后,調(diào)用latch.countDown()方法將計(jì)數(shù)器減1。主線程調(diào)用latch.await()方法進(jìn)入等待狀態(tài),直到計(jì)數(shù)器減為0,所有子線程執(zhí)行完成。最后,主線程輸出"All threads have finished."。

0