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是并 ...
随机推荐
- ES6:let 与 const
在ES6中,let 用来定义变量,const 用来定义常量 事实上var可以看成是js语言设计上的错误,但是不能移除,因为需要向后兼容 于是提出了一个新的关键字let,可以将let看成更完美的var ...
- 【渗透测试】NSA Windows 0day漏洞+修复方案
这个漏洞是前段时间爆出来的,几乎影响了全球70%的电脑,不少高校.政府和企业都还在用Windows服务器,这次时间的影响力堪称网络大地震. ------------------------------ ...
- 进程,内存,管理 ps,pstree,top,free,vmstat,iftop,lsof,查看网速
一些基础 不同进程之间,进行数据访问 同一主机:pipe 管道 socket 套接字文件 signal 信号 shm shared memory semaphore 信号量,一种计数器 不 ...
- Java学习资源 - J2EE
java Web开发基础(一)工程项目文档结构 ========rmi=========== Java RMI 框架(远程方法调用) java RMI原理详解 深究Java中的RMI底层原理 ==== ...
- dense向量和稀疏向量sparse
import org.apache.spark.mllib.linalg.Vectors object Test { def main(args: Array[String]) { val vd = ...
- Linux 命令中 find 和 xargs 命令的用法
find 命令(一) find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作.Linux 下 find 命令提供了相当多的查找条件,功能很强大,对应的学习难度也比较大. ...
- Practical aspects of deep learning
If your Neural Network model seems to have high variance, what of the following would be promising t ...
- 固定ip配置
1.打开 网络和internet设置 2. 3. 4.查看详细信息 5.记住这几个 6.选择属性开始配置 7. 8.只要把ip地址设置为同一网段下面的你想要的设置的空余ip即可,其他掩码和DNS不要修 ...
- UIKit框架使用总结--看看你掌握了多少
一.经常使用的,基本就是每次项目迭代都需要使用的 UIView.UILabel.UIImage.UIColor.UIFont.UIImageView.UITextField.UIButton. UIS ...
- python中的 dir()内置函数的作用以及使用方法
dir() 内置函数的作用 python 内置方法有很多,无论是初学者还是精通python 的程序员都不能全部即住所有的方法,这时候 dir() 方法就非常有用了,使用 dir()函数可以查看对象内的 ...