juc并发工具类之CountDownLatch闭锁
import java.util.concurrent.CountDownLatch; /**
* 闭锁: 在进行某些运算时, 只有其他所有线程的运算全部完成,当前运算才继续执行(程序流中加了一道栅栏)
* 联想: 相当于水电站的水坝, 会拦截上游的水, 当积累到一定水位才放水.
* 马场赛马,需要所有的马跑完比赛才能公布比赛的排名结果
*
*
*/
//计算多线程程序执行时间 : 分线程执行完的时间 + 主线程执行的时间(分线程必须全部在结算前执行完)
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis(); //1.初始化CountDownLatch计算线程的数量 10
CountDownLatch latch = new CountDownLatch(10);
LatchTask latchTask = new LatchTask(latch); for (int i = 0; i < 10; i++) {
new Thread(latchTask).start();
} //4.阻塞主线线程, 当CountDownLatch计数为0时才会继续执行
latch.await(); long end = System.currentTimeMillis();
System.out.println("程序消耗时间" + (end - start));
}
} class LatchTask implements Runnable{ //2.所有线程共有一个CountDownLatch计数
private CountDownLatch latch;
LatchTask(CountDownLatch latch){
this.latch = latch;
} @Override
public void run() {
synchronized (this){
try {
for (int i = 0; i < 1000; i++) {
if(i % 2 == 0){
System.out.println(i);
}
}
} finally {
//3. 一个线程执行完后计数减1
latch.countDown();
}
}
}
}
juc并发工具类之CountDownLatch闭锁的更多相关文章
- JUC并发工具类之 CountDownLatch等待多线程完成
上篇JUC同步工具之Semaphore - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)示例中,资源释放一个线程就可以退出然后另一个线程可以使用了,那如果需要所有规定数量的资源同时释放了才 ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- 【同步工具类】CountDownLatch闭锁任务同步
[同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...
- 【Java并发工具类】CountDownLatch和CyclicBarrier
前言 下面介绍协调让多线程步调一致的两个工具类:CountDownLatch和CyclicBarrier. CountDownLatch和CyclicBarrier的用途介绍 CountDownLat ...
- j.u.c系列(08)---之并发工具类:CountDownLatch
写在前面 CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“:用给定的计数 初始化 CountDownLatch.由于调用了 countDo ...
- 线程并发工具类之CountDownLatch的使用及原理分析
原文链接:http://www.studyshare.cn/blog/details/1149/1 java开发工具下载地址及安装教程大全,点这里.更多技术文章,在这里. 一.定义 CountDown ...
- Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...
- JUC并发工具类
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11449367.html java.util.concurrent及其子包,集中了Java并发的各种基础 ...
- Java并发工具类之CountDownLatch
CountDownLatch允许一个或则多个线程等待其他线程完成操作. 假如我们有这样的需求:我们需要解析一个excel文件中的多个sheet,我们可以考虑使用多线程,每一个线程解析excel中的一个 ...
随机推荐
- ssh: connect to host 192.168.11.180 port 22: Connection refused
错误原因: 1.sshd 未安装:sudo apt-get install openssh-server 2.sshd 未启动:sudo net start sshd 3.防火墙:sudo ufw d ...
- 万恶的deferred_segment_creation(延迟块分配)
11gR2开始,空表是不分配segment的.由于没有分配 segment, EXP默认不能导出空表,user_objects有该对象但是 user_segment没有该对象
- HDOJ1004
#include<iostream> #include "cstring" using namespace std; int add(char s1[],char s2 ...
- pycharm破解方法
1.下载破解文件到目录 E:/Program Files/JetBrains/PyCharm 2017.1.3安装目录下 链接:http://idea.lanyus.com/jar/Jetbrains ...
- SSH 反向代理
SSH反向代理 被控制端没有NAT或者没有静态公网IP,把本端一台服务器映射到外网给远端SSH进来,建立SSH反向隧道. 先映射本端机器到外网 nat server 2222to22 protoco ...
- 我所理解的event loop
灵魂三问 JS为什么是单线程的 我们都知道,JS是单线程的语言,那为什么呢?我的理解是JS设计之初就是为了在浏览器端完成DOM操作和一些简单交互的,既然涉及到DOM操作如果是多线程就会带来复杂的同步问 ...
- 标准库头文件 (CA2T)
标准库中,CA2T,CA2W的头文件是: #include <atlstr.h>
- hadoop mysql install (5)
reference : http://dblab.xmu.edu.cn/blog/install-mysql/ http://wiki.ubuntu.org.cn/MySQL #install mys ...
- JavaScript世界的一等公民 - 函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- 怎么从sqlserver的存储过程获得返回的数据
1.返回一个数值 declare @count int exec @count = testReturn \'111\',\'222\' select @count @count就是返回的数值是int ...