JavaDemo——并发工具之CountDownLatch
2023-09-11 14:16:28 时间
倒计时器?设定计数,使用await阻塞,使用countDown计数减1,直到计数减为0,所有await阻塞结束并往下执行。类似go语言里的WaitGroup,CountDownLatch不能重复利用。
Demo:
/**
* 2019年8月9日上午10:04:03
*/
package testThreadUtil.testCountDownLatch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* @author XWF
*
*/
public class TestCountDownLatch {
private static CountDownLatch countDownLatch = new CountDownLatch(3);//设定计数(只能使用一次不能重用)
/**
* @param args
*/
public static void main(String[] args) {
waitThread();
threadRun(1);
threadRun(2);
threadRun(3);
}
public static void waitThread() {
new Thread(() -> {
System.out.println("run wait thread");
System.out.println("起始计数:" + countDownLatch.getCount());
try {
countDownLatch.await(1, TimeUnit.SECONDS);//阻塞直到计数为0或者超时
System.out.println("超时结束第一个阻塞,计数:" + countDownLatch.getCount());
countDownLatch.await();//阻塞直到计数为0
System.out.println("结束第二个阻塞,计数:" + countDownLatch.getCount());
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("wait thread finished");
}).start();
}
public static void threadRun(final int i) {
new Thread(() -> {
System.out.println("run thread " + i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread " + i + " 计数减1");
countDownLatch.countDown();//计数减1
}).start();
}
}
结果:
相关文章
- 并发工具类(三)控制并发线程数的Semaphore
- 线程同步工具(七)在并发任务间交换数据
- 线程同步工具(三)等待多个并发事件完成
- sourceTree 配置外部比较工具BeyondCompare 解决冲突
- 手机上有没有简单的便签工具?
- 并发工具——CyclicBarrier
- 从零开始学_JavaScript_系列(一)初步概念、工具选择、简单内容输出、加载js文件
- 实用的在线预览数据字典的工具(php编写)
- 抓取Dump文件的方法和工具介绍
- 给予 GIT 的程序发布工具
- FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节
- Java多线程学习笔记 - 十二、并发工具
- AI之AutoML:Ludwig(无需编写代码/易于使用的界面和可视化自动机器学习工具)的简介、安装、使用方法之详细攻略
- 效率倍增!每个 Python 开发者都应该知道的7种好用工具!
- 安装gcc-arm-none-eabi-10-2020-q4-major-win32工具(NRF52编译ECC加密文件用)
- 静态工具类中使用注解注入service
- 代码阅读分析工具Understand 2.0试用
- 008-guava 并发工具ListenableFuture、Service
- InstallShield12豪华版破解版下载|InstallShield下载|软件打包工具