21xrx.com
2025-03-27 21:22:48 Thursday
文章检索 我的文章 写文章
Java CountdownLatch的使用方法
2023-10-14 12:28:32 深夜i     12     0
Java 使用方法 同步 线程控制

Java CountdownLatch是Java.util.concurrent包中的一个类,它提供了一种线程同步的机制,可以使一个或多个线程等待直到其他线程完成它们的操作。CountdownLatch的主要思想是向一个特定的计数值计数,每当一个线程完成它的操作时,计数值就会减1,直到计数值达到零时,等待的线程将被释放。

CountdownLatch有两个主要的方法可以使用。首先是countDown()方法,可以用于线程完成操作后将计数值减1。每当一个线程完成它的操作时,都应该调用这个方法一次,以减少计数值。第二个方法是await(),用于使线程等待,直到计数值为零。一旦计数值达到零,await()方法将返回,线程将继续执行。

下面是一个简单的示例,用于演示CountdownLatch的使用方法:

import java.util.concurrent.CountDownLatch;
public class CountdownLatchExample {
  public static void main(String[] args) throws InterruptedException {
    // 创建一个计数值为3的CountdownLatch
    CountDownLatch latch = new CountDownLatch(3);
    // 创建三个线程,并传入CountdownLatch对象
    Thread thread1 = new Thread(new Worker(latch));
    Thread thread2 = new Thread(new Worker(latch));
    Thread thread3 = new Thread(new Worker(latch));
    // 启动三个线程
    thread1.start();
    thread2.start();
    thread3.start();
    // 等待所有线程完成操作
    latch.await();
    // 所有线程都完成操作后,输出消息
    System.out.println("所有线程完成操作!");
  }
  static class Worker implements Runnable {
    private final CountDownLatch latch;
    public Worker(CountDownLatch latch)
      this.latch = latch;
    
    @Override
    public void run() {
      // 模拟完成操作的耗时
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      // 打印完成的消息,并调用countDown()
      System.out.println("线程完成操作!");
      latch.countDown();
    }
  }
}

在上面的示例中,我们创建了一个计数值为3的CountdownLatch。然后创建了三个线程,并将CountdownLatch对象传递给它们。每个线程在完成操作后,都通过调用countDown()方法减少计数值。最后,在主线程中调用latch.await()方法,使主线程等待直到计数值为零。一旦计数值为零,主线程将继续执行,并输出"所有线程完成操作!"的消息。

CountdownLatch的使用方法可以帮助我们实现一些需要等待其他线程完成操作后再执行的场景。无论是多线程编程还是并发控制,CountdownLatch都是一个非常有用的工具。

  
  

评论区