juc下的方法

发布时间 2023-12-19 17:39:35作者: Anne起飞记

CountDownLatch是一个Java的并发工具类,用于使一个线程等待其他线程完成各自的工作。其主要用法如下:

  1. 创建一个CountDownLatch实例,指定初始计数器的值。

java复制代码
  CountDownLatch countDownLatch = new CountDownLatch(3);
  1. 在需要等待的线程中调用await()方法,该方法会阻塞当前线程,直到计数器减到0。

java复制代码
  countDownLatch.await();
  1. 在其他线程中,每次完成一项工作后,调用countDown()方法来减少计数器的值。

java复制代码
  countDownLatch.countDown();

当所有线程都完成了各自的工作后,计数器减为0,此时等待的线程会从await()方法返回,继续执行后续代码。

以下是一个简单的示例代码:

java复制代码
  public class CountDownLatchExample {
  public static void main(String[] args) throws InterruptedException {
  CountDownLatch countDownLatch = new CountDownLatch(3);
  Thread thread1 = new Thread(() -> {
  System.out.println("Thread 1 started");
  try {
  Thread.sleep(1000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("Thread 1 finished");
  countDownLatch.countDown();
  });
  Thread thread2 = new Thread(() -> {
  System.out.println("Thread 2 started");
  try {
  Thread.sleep(2000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("Thread 2 finished");
  countDownLatch.countDown();
  });
  Thread thread3 = new Thread(() -> {
  System.out.println("Thread 3 started");
  try {
  Thread.sleep(3000);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("Thread 3 finished");
  countDownLatch.countDown();
  });
  thread1.start();
  thread2.start();
  thread3.start();
  countDownLatch.await(); // 等待所有线程完成工作后返回继续执行后续代码...
  }
  }