CountDownLatch作为一个同步辅助类,它能够允许一个活多个线程等待,直到计数器为0后,才开始运作。
该功能是在jdk.15之后引入的,这样我们在使用的时候就很方便
里面主要有两个方法
1. countDown : 使计数器减一
2. await :等待计数器减为0后开始运行之后的代码,否则一直处于阻塞状态
有了这两个方法,我们能很方便的加入到实际环境中,比如跑步问题
假设运动会上有5个人正在进行跑步比赛,裁判需要等运动员准备完毕后,发出命令,然后运动员开始跑,等所有的运动员都到达终点后,裁判再统计结果
package com.jacksoft.thread; import java.util.Random; import java.util.concurrent.CountDownLatch; public class ThreadDownLoadTest { /** * 总人数 */ private static final int P_COUNT = 5; /** * 裁判人数 */ private static final int TOTAL = 1; public static void main(String[] args) { /** * 准备总人数,每准备好一个人,就减一 */ final CountDownLatch readyCount = new CountDownLatch(P_COUNT); /** * 跑完人数计数,完成一个人,计数减一 */ final CountDownLatch runCount = new CountDownLatch(P_COUNT); /** * 发出命令开始跑 */ final CountDownLatch startRecordCount = new CountDownLatch(TOTAL); for(int i = 1;i <= P_COUNT;i++){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(new Random().nextInt(5000)); System.out.println("运动员" + Thread.currentThread().getName() + "已经准备完毕,还有" + readyCount.getCount() + "个人正在准备中....."); readyCount.countDown(); startRecordCount.await(); Thread.sleep(new Random().nextInt(10000)); System.out.println("运动员" + Thread.currentThread().getName() + "到达终点,还有" + runCount.getCount() + "个人在路上"); runCount.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } try { readyCount.await(); System.out.println("裁判:所有运动员准备完毕,开始跑,等待结果"); startRecordCount.countDown(); runCount.await(); System.out.println("裁判:跑步完毕,统计结果..."); } catch (Exception e) { e.printStackTrace(); } } }
运行结果:
运动员Thread-3已经准备完毕,还有5个人正在准备中..... 运动员Thread-1已经准备完毕,还有4个人正在准备中..... 运动员Thread-0已经准备完毕,还有3个人正在准备中..... 运动员Thread-2已经准备完毕,还有2个人正在准备中..... 运动员Thread-4已经准备完毕,还有1个人正在准备中..... 裁判:所有运动员准备完毕,开始跑,等待结果 运动员Thread-4到达终点,还有5个人在路上 运动员Thread-0到达终点,还有4个人在路上 运动员Thread-2到达终点,还有3个人在路上 运动员Thread-3到达终点,还有2个人在路上 运动员Thread-1到达终点,还有1个人在路上 裁判:跑步完毕,统计结果...
这样就能很方便的完成任务,当然这里并没有考虑实际的因素
比如在调用countDown的时候,要写到finally里面,不然如果出现异常信息,计数器不能减一,那么其他等待它的线程就会一直阻塞中,从而造成系统崩溃。
相关推荐
JAVA多线程CountDownLatch使用详解 JAVA多线程CountDownLatch是JAVA多线程编程中的一种同步工具,主要用来让某个线程等待其他线程执行完毕后再继续执行。下面我们将详细介绍JAVA多线程CountDownLatch的使用和原理。...
在Java多线程编程中,CountDownLatch是一个非常重要的同步工具类,它可以帮助我们协调多个线程之间的交互。本文将深入探讨CountDownLatch的工作原理、使用场景以及相关源码分析。 CountDownLatch是一个计数器,初始...
Java 使用 CountDownLatch 等待多线程全部执行完成 CountDownLatch 是 Java 中的一个同步工具类,允许一个或多个线程等待其他线程完成操作。它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理...
《汪文君JAVA多线程编程实战》是一本专注于Java多线程编程的实战教程,由知名讲师汪文君倾力打造。这本书旨在帮助Java开发者深入理解和熟练掌握多线程编程技术,提升软件开发的效率和质量。在Java平台中,多线程是...
本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...
《JAVA多线程教学演示系统》是一篇深入探讨JAVA多线程编程的论文,它针对教育领域中的教学需求,提供了一种生动、直观的演示方式,帮助学生更好地理解和掌握多线程技术。这篇论文的核心内容可能包括以下几个方面: ...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
MyBatis,作为一个优秀的Java持久层框架,提供了多种优化手段,其中包括多线程和批处理技术。本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`...
《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...
Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...
如何使用CountDownLatch同步java多线程 CountDownLatch 是 Java 并发编程中的一种常用工具,用于控制多个线程的并发执行。它可以实现多个线程之间的同步操作,使得线程之间可以协调工作,避免了线程之间的互相干扰...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...
Java多线程端口扫描是网络管理与安全领域中常用的一种技术,主要用于检测网络设备上哪些端口处于开放状态,从而分析网络的安全性或者优化网络配置。本程序通过利用Java的多线程特性,提高了扫描速度,使得在短时间内...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过实现`Runnable`接口或者继承`Thread`类。 首先,让我们从创建线程开始。当你...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
Java多线程是Java编程中的核心概念,尤其对于高级开发者来说,掌握多线程的深入理解和应用至关重要。这本书“java多线程进阶”显然旨在帮助读者深化这方面的理解,打通编程中的“任督二脉”,使开发者能够更加熟练地...
### Java多线程加队列上传文件_后台处理 #### 概述 本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程将深入探讨Java多线程的各个方面...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
Java多线程并发实战与源码分析是Java开发中至关重要的一部分,它涉及到程序性能优化、系统资源高效利用以及复杂逻辑的正确同步。本书主要聚焦于Java多线程的基础理论和实际应用,虽然书中实例和源码相对较少,但仍然...