JAVA 多线程编程之CountDownLatch使用详解

JAVA 多线程编程之CountDownLatch使用详解

什么是CountDownLatch

CountDownLatch是Java中一个同步工具类,可以用于控制线程的等待,它可以让某一个线程等待直到倒计时结束,再开始执行。

CountDownLatch的构造方法

public CountDownLatch(int count) { }

count表示倒计时数量

CountDownLatch的主要方法

public void countDown() //计数器减1
public void await() throws InterruptedException //等待所有计数器归零
public boolean await(long timeout, TimeUnit unit) throws InterruptedException //等待一定时间,如果到了指定的时间,计数器还没有归零,则返回false,否则返回true

CountDownLatch的示例

示例一:等待其他线程执行完毕再开始执行

import java.util.concurrent.CountDownLatch;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(2);

        Thread thread1 = new Thread(() -> {
            System.out.println("Thread1 is running!");
            countDownLatch.countDown();
        });
        Thread thread2 = new Thread(() -> {
            System.out.println("Thread2 is running!");
            countDownLatch.countDown();
        });

        thread1.start();
        thread2.start();

        countDownLatch.await();

        System.out.println("All threads have finished running!");
    }
}

上述示例中,创建了一个CountDownLatch对象,计数器数值为2,即需要等待两个线程执行完毕后才能继续执行主线程。在两个子线程执行完任务后,分别调用countDown()方法以减少计数器的值,主线程再调用await()方法等待计数器的值为0时继续执行。

示例二:等待其他线程执行完毕并执行其他任务

import java.util.concurrent.CountDownLatch;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(2);

        Thread thread1 = new Thread(() -> {
            System.out.println("Thread1 is running!");
            countDownLatch.countDown();
        });
        Thread thread2 = new Thread(() -> {
            System.out.println("Thread2 is running!");
            countDownLatch.countDown();
        });

        thread1.start();
        thread2.start();

        countDownLatch.await();

        System.out.println("All threads have finished running!");

        // 等待其他任务执行完毕
        System.out.println("Doing some other work...");
    }
}

上述示例中,与示例一类似,等待两个线程执行完毕后继续执行主线程。但在主线程执行完“All threads have finished running!”后,还可以继续执行其他任务,例如输出“Doing some other work...”

总结

CountDownLatch可以用于线程间的协作,控制线程的执行顺序,让一个或一组线程等待另外一组线程执行完后才执行。通过控制计数器的值,可以实现多个线程的同步执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA 多线程编程之CountDownLatch使用详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java 数据结构之堆的概念与应用

    Java 数据结构之堆的概念与应用 堆的概念 在计算机科学中,堆(Heap)是一种特殊的数据结构,是一棵树,每个父节点的键值都小于其子节点的键值,这样的堆成为小根堆(Min Heap),反之成为大根堆(Max Heap)。在堆中没有父子关系的节点之间也没有其他约束关系。常见的堆有二叉堆、斐波那契堆等。 对于小顶堆,任意节点的键值都小于或等于其子节点的键值,根…

    Java 2023年5月26日
    00
  • java 字符串匹配函数

    Java 字符串匹配函数指的是在字符串中查找特定子串出现的位置或数量的函数。在 Java 中,有多种实现字符串匹配的函数,其中最常用的是 String 类的相关方法以及正则表达式。 下面是 Java 字符串匹配的完整攻略: 使用 String 方法进行字符串匹配 Java 提供了一系列的 String 方法,支持在字符串中查找特定子串出现的位置或数量。这些方…

    Java 2023年5月26日
    00
  • javaSE基础如何通俗的理解javaBean是什么

    JavaSE作为Java语言的基础和通用部分,包含了大量的API和基础概念。其中,JavaBean是JavaSE中的一个重要概念,它作为JavaSE中的一个基础部分,也是JavaEE开发中常用的一种设计模式。下面我们来详细讲解如何通俗的理解JavaBean。 一、JavaBean的含义 JavaBean是一种Java语言编写的可重用组件。它通常用于表示一个实…

    Java 2023年5月20日
    00
  • Java读取properties文件之中文乱码问题及解决

    为了更好地回答这个问题,我先介绍一下什么是 properties 文件。 Properties 文件是 Java 配置文件的一种常见格式,多用于存储项目的配置信息,如数据库连接的 URL、用户名和密码、邮件服务器的信息等等。它的格式如下所示: key1=value1 key2=value2 key3=value3 其中,key 和 value 分别表示属性的…

    Java 2023年5月20日
    00
  • Java基础之Thymeleaf的简单使用

    下面是“Java基础之Thymeleaf的简单使用”的完整攻略。 1. 什么是Thymeleaf Thymeleaf是一种服务器端Java模板引擎,它能够处理HTML、XML、JavaScript、CSS、文本等模板。与其他模板引擎相比,Thymeleaf有以下特点: 语法简单且易于学习; 支持自然模板:模板可以在浏览器中预览,而不需要部署到客户端; 支持表…

    Java 2023年5月23日
    00
  • IDEA创建Maven工程Servlet的详细教程

    我将为你提供详细的”IDEA创建Maven工程Servlet的详细教程”攻略。 目录 背景知识 创建Maven工程 导入Servlet依赖 创建Servlet类 部署项目 示例代码 总结 1. 背景知识 在开始创造Maven工程和Servlet之前,需要知道什么是Maven和Servlet,以及IDEA是如何工作的。 1.1 Maven Maven是一个开源…

    Java 2023年5月19日
    00
  • InputStreamReader和BufferedReader用法及实例讲解

    InputStreamReader和BufferedReader用法及实例讲解 在Java中,读取文件或者网络数据时,我们通常会用到InputStreamReader和BufferedReader这两个类。InputStreamReader是将字节流转换成字符流,而BufferedReader则是为了加速读取字符流而存在的。下面我们将逐步讲解这两个类的用法及…

    Java 2023年5月20日
    00
  • 详解Java数组的四种拷贝方式

    下面是详解Java数组的四种拷贝方式: 概述 在Java中,我们可以使用多种方式对数组进行拷贝。这些拷贝方式包括:1. for循环2. System.arraycopy()方法3. Arrays.copyOf()方法4. clone()方法 本文将详细介绍这四种方式,并提供示例演示它们的使用方法和区别。 for循环 使用for循环拷贝数组是最基本和最常用的方…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部