JavaでのCountDownLatchの使い方は何ですか?

Javaには、CountDownLatchという並行ツールがあります。これは、一連の操作が完了するのを1つまたは複数のスレッドが待つことを可能にします。

CountDownLatchの使用方法は以下の通りです。

  1. 指定する操作の数だけCountDownLatchオブジェクトを作成します。たとえば、n個の操作を待つ必要がある場合は、CountDownLatchオブジェクトを作成してnで初期化します。
  2. 各操作完了後に、CountDownLatchのcountDown()メソッドを呼び出して、カウンターの値を減らします。これは操作が完了したことを示します。
  3. CountDownLatchのawait()メソッドを呼び出す必要がある場合は、すべての処理が完了するのを待つことができます。これにより、呼び出しスレッドが、カウンターの値が0になるまで待機します。
  4. 全ての操作が完了すると、カウンターの値は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を使用することで、一連の操作を完了するまで待機する機能を簡単に実現できます。

bannerAds