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 Date类常用示例_动力节点Java学院整理

    Java Date类常用示例攻略 什么是Date类 在Java中,Date类是一个代表日期和时间的类,用来表示一个固定的日期或时间点。 Date类的构造方法 Date():用当前日期和时间构造一个Date对象。 Date(long date):用一个标准的毫秒数来构造一个Date对象。 Date(int year, int month, int date):…

    Java 2023年5月20日
    00
  • 非常实用的Tomcat启动脚本实现方法

    非常实用的Tomcat启动脚本实现方法 在Linux环境下,通常我们会使用启动脚本的方式来启动Tomcat。而对于初学者来说,编写一个完整可靠的启动脚本不是一件容易的事情。本文将介绍一种非常实用的Tomcat启动脚本实现方法,帮助大家快速实现Tomcat的自动启动、关闭、查看状态等操作。 Step 1: 创建启动脚本 首先,我们需要创建一个启动脚本。为了让脚…

    Java 2023年5月19日
    00
  • Scala文件操作示例代码讲解

    我们来详细讲解一下“Scala文件操作示例代码讲解”的完整攻略。 概述 在Scala程序中,文件操作是非常常见的操作。Scala提供了一些简单易用的API帮助我们在程序中进行文件操作。本攻略将会详细讲解如何在Scala程序中进行简单的文件操作,包括如何读取文件、写入文件、拷贝文件和删除文件。 读取文件 Scala的io包中提供了File类,可以用来表示文件或…

    Java 2023年5月20日
    00
  • SpringSecurity怎样使用注解控制权限

    使用注解控制权限是Spring Security中比较方便的一种方式。在Spring Security中,我们可以使用@PreAuthorize和@PostAuthorize注解来控制方法的访问权限,以保证系统的安全性。 @PreAuthorize注解 @PreAuthorize注解的作用是在方法执行前进行权限验证,如果验证失败,则该方法不会被执行。该注解的…

    Java 2023年5月20日
    00
  • Mybatis超级强大的动态SQL语句大全

    Mybatis超级强大的动态SQL语句大全 Mybatis是一个流行的开源持久层框架,它可以与SQL语句进行交互来完成数据库操作。在Mybatis中,动态SQL语句可以让开发人员根据实际需求动态生成SQL语句,从而提高代码的灵活性和可扩展性。下面是Mybatis动态SQL语句的完整攻略。 使用if元素生成动态SQL语句 if元素允许我们根据条件生成动态SQL…

    Java 2023年5月20日
    00
  • Java的异常类型总结

    以下是Java的异常类型总结的完整攻略: Java的异常类型总结 在Java程序中,当运行时出现异常情况时会抛出异常,这时程序会中断并把错误信息输出到控制台。Java中异常分为两种类型:已检查异常和未检查异常。 已检查异常(Checked Exceptions) 已检查异常是指在编写Java程序时,编译器要求必须对可能出现该异常的代码进行处理或者声明抛出异常…

    Java 2023年5月27日
    00
  • Java 超详细讲解异常的处理

    Java 超详细讲解异常的处理 什么是异常? 在 Java 中,异常指的是程序在运行过程中发生了意外情况或错误,导致程序无法继续运行的情况。比如数组访问越界、空指针等。 异常的分类 在 Java 中,异常分为两类:受检异常和非受检异常。 受检异常(Checked Exception) 受检异常指的是在编译时就能够发现的异常,需要在代码中显式的进行处理。比如读…

    Java 2023年5月19日
    00
  • SpringBoot2 整合 ClickHouse数据库案例解析

    下面我将为你详细讲解如何实现SpringBoot2整合ClickHouse数据库的步骤。 准备工作 安装ClickHouse数据库 创建一个SpringBoot2项目 添加依赖 在SpringBoot2项目的pom.xml文件中添加ClickHouse驱动依赖: <dependency> <groupId>cc.blynk</g…

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