JavaでのCountDownLatchの使い方は何ですか?
Javaには、CountDownLatchという並行ツールがあります。これは、一連の操作が完了するのを1つまたは複数のスレッドが待つことを可能にします。
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に指定されます。その後、3つの作業スレッドを作成するためにforループを使用し、各作業スレッドでcountDown()メソッドを呼び出してカウンターの値を減らします。
最後に、latch.await()メソッドを呼び出すと、メインスレッドが待機し、カウンターの値が0になるまで待機します。すべての作業スレッドが完了すると、カウンターの値が0になり、メインスレッドは続行し、”全てのスレッドが作業を完了しました”と表示されます。
CountDownLatchの基本的な使用方法です。CountDownLatchを使用することで、一連の操作を完了するまで待機する機能を簡単に実現できます。