返回

学习 CountDownLatch 超时设定

后端

CountDownLatch 简介

CountDownLatch 是一个并发编程工具,用于协调多个线程之间的同步。它允许一个或多个线程等待其他线程完成任务。

CountDownLatch 的工作原理是,它有一个计数器,初始化时将计数器的值设置为某个数字。当其他线程完成任务后,它们会调用 CountDownLatch 的 countDown() 方法,使计数器的值减一。当计数器的值变为零时,等待的线程将被唤醒。

CountDownLatch 超时设定

CountDownLatch 可以设置超时时间,当等待的线程在超时时间内没有被唤醒,则抛出 TimeoutException 异常。

CountDownLatch 的超时设定方法是 await(long timeout, TimeUnit unit),其中 timeout 是超时时间,unit 是时间单位。例如,以下代码将等待 CountDownLatch 在 10 秒内被唤醒,如果 10 秒内没有被唤醒,则抛出 TimeoutException 异常:

countDownLatch.await(10, TimeUnit.SECONDS);

CountDownLatch 超时设定示例

以下是一个 CountDownLatch 超时设定的示例代码:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class CountDownLatchTimeoutExample {

    public static void main(String[] args) throws InterruptedException {
        // 创建一个 CountDownLatch,计数器值为 1
        CountDownLatch countDownLatch = new CountDownLatch(1);

        // 创建一个线程,该线程将在 5 秒后调用 countDownLatch.countDown() 方法
        Thread thread = new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
        });
        thread.start();

        // 等待 CountDownLatch 在 10 秒内被唤醒
        try {
            countDownLatch.await(10, TimeUnit.SECONDS);
        } catch (TimeoutException e) {
            System.out.println("Timeout!");
        }

        // 输出结果
        System.out.println("Main thread finished.");
    }
}

运行结果:

Timeout!
Main thread finished.

在上面的示例中,主线程等待 CountDownLatch 在 10 秒内被唤醒,但是由于线程在 5 秒后才调用 countDownLatch.countDown() 方法,因此主线程在 10 秒内没有被唤醒,抛出 TimeoutException 异常。