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实现简单的银行管理系统”的完整攻略。 1. 确定需求和设计整体架构 在开发任何一种软件系统之前,我们都需要先明确需求,明确需要实现哪些功能和用户需求。在之后的设计过程中,我们需要设计整体的架构。 在本项目中,我们可以按如下的步骤进行: 分析整个系统,确定需要的基本功能和用户需求(例如:存、取、转账、查询余额等)。 设计整体的系统架…

    Java 2023年5月18日
    00
  • SpringMvc/SpringBoot HTTP通信加解密的实现

    以下是 SpringMvc/SpringBoot HTTP通信加解密的实现攻略: 背景介绍 在实际 Web 应用中,为了确保数据传输的安全性,通常需要对数据进行加密和解密操作。Spring 框架提供了多种方式实现 HTTP 通信加解密,本文介绍其中两种方式:使用 Spring Mvc 方式和使用 Spring Boot 方式。 方式一:使用 Spring M…

    Java 2023年5月20日
    00
  • JSP学习经验小结分享

    JSP学习经验小结分享 本文将分享我学习JSP(JavaServer Pages)的经验,并提供一些示例说明。JSP是一种基于Java的Web开发技术,可以帮助我们创建可重用、动态的Web页面。 学习前的准备工作 在学习JSP之前,需要了解以下基本知识: HTML和CSS:JSP页面是基于HTML和CSS构建的,因此需要了解这些技术; Java基础:JSP技…

    Java 2023年6月15日
    00
  • Spring boot进行参数校验的方法实例详解

    Spring Boot进行参数校验的方法实例详解 什么是参数校验 参数校验是指在方法调用时,检查方法参数的合法性。如果不合法,则直接抛出IllegalArgumentException 异常,避免了程序继续执行而造成更严重的后果。 Spring Boot参数校验的实现方式 在Spring Boot中,提供了javax.validation API来进行参数校…

    Java 2023年5月31日
    00
  • 为Java程序员准备的10分钟Perl教程

    为Java程序员准备的10分钟Perl教程是一份旨在通过简短的教学来为Java程序员介绍Perl的基础知识的文档。下面是一份完整攻略: 简介 在这份教程中,我们将学习Perl的基础知识。Perl是一种通用的脚本语言,特别适合快速开发。Perl有一个庞大的社区以及丰富的文档和库。 变量 在Perl中声明变量不需要指定类型。变量的类型会随着所存储的数据类型而变化…

    Java 2023年5月23日
    00
  • jquery动态加载select下拉框示例代码

    为了让回答更加清晰明了,我将对话分为几个步骤进行讲解,如下: 确认需求 首先,在动手敲代码之前,我们需要清晰地明确自己的需求是什么。在这个场景中,我们需要实现一个“动态加载select下拉框”的功能。具体来说,我们希望在页面刚加载完成时,下拉框中的选项列表是空的,当用户触发某个事件(比如点击某个按钮)后,网页通过调用ajax请求获取数据,并动态地将这些数据填…

    Java 2023年6月15日
    00
  • Android源码解析之属性动画详解

    Android源码解析之属性动画详解 什么是属性动画 属性动画可以动态地改变控件的属性,例如位置、大小、颜色等。与补间动画不同,属性动画不仅可以对View对象进行操作,还可以对任意的对象进行操作,只要这个对象有对应的setter和getter方法。 属性动画的基本使用 在XML文件中定义动画: <set xmlns:android="http…

    Java 2023年6月15日
    00
  • C#模拟实现抽奖小程序的示例代码

    让我详细讲解一下“C#模拟实现抽奖小程序的示例代码”的完整攻略。 步骤1:确定抽奖方式和奖项 首先确定抽奖的方式和奖项,可以是平等概率、权重抽奖等方式,同时也要定义好奖项的名称和中奖几率。 示例代码: //定义奖项名称 string[] rewardNames = {"一等奖", "二等奖", "三等奖&qu…

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