文档章节

CountDownLatch使用小例

Small-Liu
 Small-Liu
发布于 2016/03/01 09:35
字数 147
阅读 44
收藏 0

需要:主线程里启动子线程,需要等子线程里的某个操作完成后主线程才能继续往下走。

final CountDownLatch countDownLatch = new CountDownLatch(2);
for(int i=0;i<2;i++) {
	// 服务端启动
	new Thread(new Runnable() {
		public void run() {
			try {
				Thread.sleep(100);
				System.out.println("test1");
				Thread.sleep(100);
				countDownLatch.countDown();
				Thread.sleep(100);
				System.out.println("test2");
			} catch (Exception e) {
				e.printStackTrace();
				System.exit(-2);
			}
		}
	}).start();
}
System.out.println("test-main1");
try {
	countDownLatch.await();
} catch (InterruptedException e) {
	e.printStackTrace();
}
System.out.println("test-main2");

结果:

test-main1
test1
test1
test-main2
test2
test2

 CountDownLatch是原子操作,await()阻塞直到初始值变为0

只有当两个线程都走完test1时主线程才会继续往下走。

© 著作权归作者所有

共有 人打赏支持
Small-Liu
粉丝 17
博文 56
码字总数 49976
作品 0
南京
程序员
私信 提问
Java并发编程之CountDownLatch

CountDownLatch(闭锁)是一个很有用的工具类,利用它我们可以拦截一个或多个线程使其在某个条件成熟后再执行。 说到这,给大家举一个最典型的例子:假设一条流水线上有三个工作者:worker0,w...

code_xzh
05/24
0
0
【java.util.concurrent】CountDownLatch解析

一、概念 被用来同步一个或多个线程任务,强制他们等待直到由其他线程完成正在执行的一组操作。 可以向CountDownLatch对象设置一个计数值,可以通过在该对象上调用countDown()方法来减小该计...

阿阿阿阿阿局
2016/08/09
14
0
Java并发学习(十七)-并发工具CountDownLatch

另一个并发工具,CountDownLatch,和CyclicBarrier功能上有点类似,但是在实现上和是不同的。 What is CountDownLatch 简单的说,也是一个计数器,和CyclicBarrier相比,一定方面是更加灵活的...

anLA_
2017/12/10
0
0
java中等待所有线程都执行结束

使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒 @Test public void testThreadSync3() { final Vector list = new Vector(); Thread[] t...

17099933344
2017/11/09
0
0
测试异步代码

如果说异步代码不好写是共识的话,那么写异步代码测试用例就更难了。最近我刚刚完成了一个 Flaky 测试,所以想和大家分享一些关于写异步测试用例的想法。 这篇文章里,我们会探索一个关于异步...

oschina
2015/10/08
3.6K
3

没有更多内容

加载失败,请刷新页面

加载更多

性能优化(JVM概念及配置)

虚拟机组成 一次编写,到处运行 Java虚拟机是对操作系统的模拟,隔离差异 2018编程语言排行榜 一个复杂的构架 虚拟机的内部概念 运行原理 编译器,解释器执行流程 内存分配-线程模型 栈帧模型...

这很耳东先生
4分钟前
0
0
Scala之初步认识与环境准备

1. 了解 Scala 1.1. 什么是 Scala Scala 是 Scalable Language 的简写,是一门多范式的编程语言。 Scala设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚...

飞鱼说编程
26分钟前
2
0
Vue项目分环境打包的实现步骤

在项目开发中,我们的项目一般分为开发版、测试版、Pre版、Prod版。Vue-cli的默认环境一只有dev和prod两个,之前每次要发布测试版或Pre版都是修改了源码中API地址后打包,这样很麻烦。如果能...

peakedness丶
26分钟前
2
0
vue+lowdb+express

搭建流程: 1.安装Node.js; 2.安装npm; 3.安装Express; 搭建流程 npm install -g express 安装 express 生成器 npm install -g express-generator 查看是否安装成功,随便输的一个命令...

Js_Mei
31分钟前
2
0
Qt那些事0.0.15

以下与Q_DECLARE_METATYPE相关内容全部是翻译自Qt文档。参看QVariant Class | Qt Core 5.9以及QMetaType Class | Qt Core 5.9 QVariant QVariant::fromValue(const T& value) 返回一份包含v......

Ev4n
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部