在Java中,CountDownLatch是一種并發工具,它允許一個或多個線程等待一組操作完成。
CountDownLatch的使用方法如下:
創建一個CountDownLatch對象,指定需要等待的操作數量。例如,如果有n個操作需要等待完成,則可以創建一個CountDownLatch對象并將其初始化為n。
在每個操作完成之后,調用CountDownLatch的countDown()方法來減少計數器的值。這表示一個操作已經完成。
在需要等待所有操作完成的地方,調用CountDownLatch的await()方法。這將導致調用線程等待,直到計數器的值為0。
當所有操作都完成時,計數器的值將變為0,調用線程將被釋放。
下面是一個簡單的示例代碼,演示了CountDownLatch的使用:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
int numberOfThreads = 3;
CountDownLatch latch = new CountDownLatch(numberOfThreads);
for (int i = 0; i < numberOfThreads; i++) {
Thread thread = new Thread(new Worker(latch));
thread.start();
}
latch.await();
System.out.println("All threads have completed their work");
}
static class Worker implements Runnable {
private final CountDownLatch latch;
public Worker(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 執行一些操作
System.out.println("Thread " + Thread.currentThread().getId() + " is working");
latch.countDown();
}
}
}
在上面的示例中,創建了一個CountDownLatch對象,并指定需要等待的線程數量為3。然后,使用一個for循環創建3個工作線程,并在每個工作線程中調用countDown()方法來減少計數器的值。
最后,調用latch.await()方法,這將導致主線程等待,直到計數器的值為0。當所有工作線程都完成時,計數器的值將變為0,主線程會繼續執行,并打印"All threads have completed their work"。
這就是CountDownLatch的基本使用方法。通過使用CountDownLatch,可以很方便地實現等待一組操作完成的功能。