欢迎访问宙启技术站
智能推送

JAVA多线程CountDownLatch倒计时锁应用

发布时间:2023-05-17 16:22:24

CountDownLatch是Java中的一个多线程同步工具,它可以让一个或多个线程等待其他线程完成任务后再执行。在实际应用中,CountDownLatch常常用于系统启动时的等待,或者某个线程需要等待其他线程完成一项任务后再开始执行。

CountDownLatch的使用非常简单,只需要创建一个CountDownLatch对象并指定需要等待的线程数,对于需要等待的线程,它们在执行完任务后需要调用CountDownLatch的countDown方法以通知主线程继续执行。

下面我们来看一个简单的例子:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CountDownLatchTest {
    public static void main(String[] args) throws InterruptedException {
        int count = 10;
        CountDownLatch latch = new CountDownLatch(count);
        ExecutorService executor = Executors.newFixedThreadPool(count);
        for (int i = 0; i < count; i++) {
            final int j = i + 1;
            executor.execute(() -> {
                try {
                    System.out.println("Thread " + j + " is working");
                    Thread.sleep(1000);
                    System.out.println("Thread " + j + " has done its work");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    latch.countDown();
                }
            });
        }
        latch.await();
        System.out.println("All threads have finished their work");
        executor.shutdown();
    }
}

在这个例子中,我们创建了10个线程,并让它们执行一个1秒钟的任务。主线程在启动这10个线程后等待它们执行完毕,然后输出"All threads have finished their work"。

CountDownLatch的使用有很多应用场景,比如说在一个复杂的系统中,启动需要一些时间,我们可以用CountDownLatch让主线程等待所有线程完成启动后再继续执行;或者在一些多个线程协作完成某项任务的情况下,我们可以用CountDownLatch让其中一个线程等待其他线程完成任务后再继续执行。

总之,CountDownLatch是一个非常实用的多线程工具,它可以让多线程协作更加方便和高效。