java并发初探CountDownLatch
java并发初探CountDownLatch
CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作。
当前前程A调用CountDownLatch的await方法进入阻塞(LockSupportd的park方法),
其他线程调用CountDownLatch调用countDown(),CountDownLatch的内部变量
count为零时,线程A唤醒。
* A synchronization aid that allows one or more threads to wait until
* a set of operations being performed in other threads completes.
*
例子
package com.java.javabase.thread.base.concurrent.lock;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
/**
* @author
*/
@Slf4j
public class CountDownLatchTest {
private static CountDownLatch countDownLatch = new CountDownLatch(5);
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
try {
log.info("thread {} call wait ",Thread.currentThread().getName());
sleep(1000);
countDownLatch.await();
log.info("thread {} end ",Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
for (int i = 0; i < 5; i++) {
new Thread() {
@Override
public void run() {
log.info("thread {} run ",Thread.currentThread().getName());
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
countDownLatch.countDown();
}
}.start();
}
log.info("current thread is {}",Thread.currentThread().getName());
try {
countDownLatch.await();
log.info("thread is {} end",Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
例子结果
2019-08-09 17:40:10,492 [Thread-1] INFO CountDownLatchTest - thread Thread-1 run
2019-08-09 17:40:10,492 [Thread-3] INFO CountDownLatchTest - thread Thread-3 run
2019-08-09 17:40:10,492 [Thread-2] INFO CountDownLatchTest - thread Thread-2 run
2019-08-09 17:40:10,492 [Thread-0] INFO CountDownLatchTest - thread Thread-0 call wait
2019-08-09 17:40:10,492 [main] INFO CountDownLatchTest - current thread is main
2019-08-09 17:40:10,492 [Thread-4] INFO CountDownLatchTest - thread Thread-4 run
2019-08-09 17:40:10,492 [Thread-5] INFO CountDownLatchTest - thread Thread-5 run
2019-08-09 17:40:11,491 [main] INFO CountDownLatchTest - thread is main end
2019-08-09 17:40:11,491 [Thread-0] INFO CountDownLatchTest - thread Thread-0 end
java并发初探CountDownLatch的更多相关文章
- java并发初探ConcurrentSkipListMap
java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...
- java并发初探ConcurrentHashMap
java并发初探ConcurrentHashMap Doug Lea在java并发上创造了不可磨灭的功劳,ConcurrentHashMap体现这位大师的非凡能力. 1.8中ConcurrentHas ...
- java并发初探ThreadPoolExecutor拒绝策略
java并发初探ThreadPoolExecutor拒绝策略 ThreadPoolExecuter构造器 corePoolSize是核心线程池,就是常驻线程池数量: maximumPoolSize是最 ...
- java并发初探CyclicBarrier
java并发初探CyclicBarrier CyclicBarrier的作用 CyclicBarrier,"循环屏障"的作用就是一系列的线程等待直至达到屏障的"瓶颈点&q ...
- java并发初探ReentrantWriteReadLock
java并发初探ReentrantWriteReadLock ReenWriteReadLock类的优秀博客 ReentrantReadWriteLock读写锁详解 Java多线程系列--" ...
- java并发中CountDownLatch的使用
文章目录 主线程等待子线程全都结束之后再开始运行 等待所有线程都准备好再一起执行 停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制 ...
- JAVA并发,CountDownLatch使用
该文章转自:http://www.itzhai.com/the-introduction-and-use-of-a-countdownlatch.html CountDownLatch 1.类介绍 一 ...
- Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
前言: 如果说J.U.C包下的核心是什么?那我想答案只有一个就是AQS.那么AQS是什么呢?接下来让我们一起揭开AQS的神秘面纱 AQS是什么? AQS是AbstractQueuedSynchroni ...
- Java并发编程-CountDownLatch
基于AQS的前世今生,来学习并发工具类CountDownLatch.本文将从CountDownLatch的应用场景.源码原理解析来学习这个并发工具类. 1. 应用场景 CountDownLatch是并 ...
随机推荐
- https://www.cnblogs.com/lfs2640666960/p/8529115.html
https://www.cnblogs.com/lfs2640666960/p/8529115.html
- 总结 jion,group join 基于方法的查询与查询表达式 对比
数据源: 代码: using (tempdbEntities context = new tempdbEntities()) { #region 基于方法的查询 Console.WriteLine(& ...
- 「CF891C」Envy
传送门 Luogu 解题思路 考虑最小生成树的几个性质: 所有最小生成树中边权相等的边的条数相等 在任意一颗最小生成树中,边权相等的边所联通的点集一定 那么我们考虑把边权相等的边单独拿出来考虑. 每次 ...
- 【Go语言系列】第三方框架和库——GIN:快速入门
要求要安装Gin软件包,需要:1.安装Go(需要1.11+版本)2.设置Go工作区 安装1.下载并安装 gin: $ go get -u github.com/gin-gonic/gin 2.将 gi ...
- 安卓开发:初步了解布局文件layout
了解完项目的目录结构,主要文件的作用之后. 了解完各常量文件的定义和使用之后,接下来的重头戏肯定是布局文件layout. 果然,网上关于“安卓布局文件layout”的各种介绍.解析.深入分析,等等资料 ...
- Linux 笔记:目录
目录 Linux的文件系统目录树庞大而复杂.如果你非常熟悉它的话,会极大地提高你应用Linux的技巧. 简单地说,典型的Linux包含五大文件系统目录. 根据你自己系统的需要和大小,这些文件系统目录能 ...
- 【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案
前言 之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的. ...
- Spring Boot 2.0 新特性
这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码.在 Spring Boot 系列文章中会持续退出实践章节. ...
- 判断ie8以下 或者ie9以下
1.各种浏览器下载 http://browsehappy.osfipin.com/ 2.ie8浏览器以下 if(![].map) { // IE8浏览器 alert('ie8浏览器') } 3.ie9 ...
- 如何用 pycharm 调试 airflow
airflow 和 pycharm 相关基础知识请看其他博客 我们在使用 airflow的 dag时. 每次写完不知道对不对的,总不能到页面环境中跑一下,等到报错再调试吧.这是很让人恼火的事情 这里我 ...