Java中的CountDownLatch详解

Java中的CountDownLatch详解

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

一、什么是CountDownLatch?

CountDownLatch 是Java并发包中的一个工具类,用于实现线程间的等待。它允许一个或多个线程等待其他线程完成操作,然后再继续执行。CountDownLatch 的主要方法是 await()countDown(),分别用于线程等待和计数减少。

二、CountDownLatch的基本用法

在示例中,我们将展示如何使用 CountDownLatch 来实现一个主线程等待多个工作线程执行完毕后再继续执行的场景。

java 复制代码
package cn.juwatech.concurrent;

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch latch = new CountDownLatch(3); // 初始化计数器为3

        Worker worker1 = new Worker(latch, "Worker-1");
        Worker worker2 = new Worker(latch, "Worker-2");
        Worker worker3 = new Worker(latch, "Worker-3");

        worker1.start();
        worker2.start();
        worker3.start();

        latch.await(); // 主线程等待所有工作线程完成

        System.out.println("All workers have finished their work.");
    }

    static class Worker extends Thread {
        private CountDownLatch latch;

        public Worker(CountDownLatch latch, String name) {
            super(name);
            this.latch = latch;
        }

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + " is working.");
            try {
                Thread.sleep(1000); // 模拟工作耗时
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + " has finished.");
            latch.countDown(); // 每个工作线程完成后计数器减一
        }
    }
}

三、代码解析

  1. main 方法中,创建了一个 CountDownLatch 实例 latch,初始计数为3。
  2. 创建了三个工作线程 Worker,每个线程在执行完模拟工作后,调用 latch.countDown() 来减少计数器。
  3. 主线程调用 latch.await() 来等待计数器归零,即所有工作线程执行完毕。
  4. 执行结果将输出所有工作线程完成后的提示信息。

四、总结

通过本文的示例,我们学习了如何利用 CountDownLatch 实现线程间的协作。它常用于多个线程之间的同步,主要用途包括等待多个子线程完成某项任务后再执行接下来的操作。

著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

相关推荐
带刺的坐椅23 分钟前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看2 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
应用市场2 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
桦说编程2 小时前
深入解析CompletableFuture源码实现(2)———双源输入
java·后端·源码
java_t_t2 小时前
ZIP工具类
java·zip
lang201509282 小时前
Spring Boot优雅关闭全解析
java·spring boot·后端
Dfreedom.3 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生3 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
虚行3 小时前
C#上位机工程师技能清单文档
开发语言·c#
小羊在睡觉3 小时前
golang定时器
开发语言·后端·golang