Java 多线程系列 CountDownLatch
CountDownLatch
一个或多个线程等待其他线程完成操作后在在执行
CountDownLatch通过一个计数器来实现,await方法阻塞直到 countDown() 调用计数器归零之后释放所有等待的线程,并且任何后续的await调用立即返回。这是一次性现象 - 计数无法重置。如果您需要重置计数的版本,请考虑使用CyclicBarrier。
public class WorkerRunnable implements Runnable {
private CountDownLatch countDownLatch;
private int i;
public WorkerRunnable(CountDownLatch latch, int i) {
this.countDownLatch = latch;
this.i = i;
}
@Override
public void run() {
doWork();
this.countDownLatch.countDown();
}
private void doWork() {
System.out.println("当前的线程: " + i);
}
}
public class Client {
public static void main(String[] args) throws InterruptedException {
final int n = 10;
CountDownLatch doneSignal = new CountDownLatch(n);
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < n; i++) {
executor.execute(new WorkerRunnable(doneSignal, i));
}
doneSignal.await();
System.out.println("结束");
}
}
out
当前的线程: 7
当前的线程: 6
当前的线程: 2
当前的线程: 1
当前的线程: 9
当前的线程: 0
当前的线程: 5
当前的线程: 4
当前的线程: 8
当前的线程: 3
结束
Java 多线程系列 CountDownLatch的更多相关文章
- Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
概要 前面对"独占锁"和"共享锁"有了个大致的了解:本章,我们对CountDownLatch进行学习.和ReadWriteLock.ReadLock一样,Cou ...
- java多线程系列(八)---CountDownLatch和CyclicBarrie
CountDownLatch 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线 ...
- Java多线程系列——计数器 CountDownLatch
简介: CountDownLatch 是一个非常实用的多线程控制工具类,通常用来控制线程的等待,它可以让某个线程等待直到倒计时结束 CountDownLatch 提供了两个主要的方法,await(). ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
概要 本章介绍JUC包中的CyclicBarrier锁.内容包括:CyclicBarrier简介CyclicBarrier数据结构CyclicBarrier源码分析(基于JDK1.7.0_40)Cyc ...
- Java多线程系列--“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下:01. Java多线程系列--“JUC锁”01之 框架02. Java多线程系列--“JUC锁”02之 互斥锁Reentrant ...
- Java多线程系列目录(共43篇)
最近,在研究Java多线程的内容目录,将其内容逐步整理并发布. (一) 基础篇 01. Java多线程系列--“基础篇”01之 基本概念 02. Java多线程系列--“基础篇”02之 常用的实现多线 ...
- Java多线程系列--“JUC锁”05之 非公平锁
概要 前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析.内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基 ...
随机推荐
- 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...
- LOJ#2665 树的计数
题意:给你DFS序和BFS序,求树的期望高度. 解:先分析性质. 考虑到BFS序是分层的,DFS序的子树是一段,那么我们遍历BFS序并在DFS序上标记对应点的话,就会发现BFS序每一层都会把若干棵子树 ...
- Cucumber启动类配置
@CucumberOptions ( features = "src/test/resources", glue = {"Steps"}, tags = {&q ...
- Luogu P4716 【模板】最小树形图
题目链接\(Click\) \(Here\) 不知道有什么用的一个东西.本来不打算再大量扩知识点了但还是学一下好了,反正也不难. 原理:树上父亲唯一,每次选最短的父边. 此时会有两类情况: 就这样正常 ...
- 优雅的使用git
1.当我们成功安装git后,首先要做的就是配置我们的用户名以及邮箱: git config --global user.name "xxx" git config --global ...
- Unity支持的跨平台
Windows Mac OS X Web Browsers IOS android PlayStation 3 Xbox 360 Windows Store Windows Phone Linux B ...
- 细说Cookie--转
Cookie虽然是个很简单的东西,但它又是WEB开发中一个很重要的客户端数据来源,而且它可以实现扩展性很好的会话状态, 所以我认为每个WEB开发人员都有必要对它有个清晰的认识.本文将对Cookie这个 ...
- H5_0007:使用base64做为背景图片
page { overflow:hidden; position:fixed; /* background-image:url('http://p0d5ombx1.bkt.clouddn.com/lo ...
- Frp基础配置模版
Frp基础配置模版存档,供参考: 不写注释说明了,直接上模板: frps.ini [common] bind_port = 7000 privilege_token = password vhost_ ...
- 运维工作笔记--------------mongodb无法启动问题
1.根据编译的脚本检查脚本内的服务启动路径是否正确 2.更改完成后删除pid文件 3.重启mongod