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闭锁的更多相关文章

  1. JUC并发工具类之 CountDownLatch等待多线程完成

    上篇JUC同步工具之Semaphore - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)示例中,资源释放一个线程就可以退出然后另一个线程可以使用了,那如果需要所有规定数量的资源同时释放了才 ...

  2. 并发工具类:CountDownLatch、CyclicBarrier、Semaphore

    在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...

  3. 【同步工具类】CountDownLatch闭锁任务同步

    [同步工具类]CountDownLatch闭锁任务同步 转载:https://www.cnblogs.com/yangchongxing/p/9214284.html 打过dota的同学都知道,多人一 ...

  4. 【Java并发工具类】CountDownLatch和CyclicBarrier

    前言 下面介绍协调让多线程步调一致的两个工具类:CountDownLatch和CyclicBarrier. CountDownLatch和CyclicBarrier的用途介绍 CountDownLat ...

  5. j.u.c系列(08)---之并发工具类:CountDownLatch

    写在前面 CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“:用给定的计数 初始化 CountDownLatch.由于调用了 countDo ...

  6. 线程并发工具类之CountDownLatch的使用及原理分析

    原文链接:http://www.studyshare.cn/blog/details/1149/1 java开发工具下载地址及安装教程大全,点这里.更多技术文章,在这里. 一.定义 CountDown ...

  7. Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...

  8. JUC并发工具类

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11449367.html java.util.concurrent及其子包,集中了Java并发的各种基础 ...

  9. Java并发工具类之CountDownLatch

    CountDownLatch允许一个或则多个线程等待其他线程完成操作. 假如我们有这样的需求:我们需要解析一个excel文件中的多个sheet,我们可以考虑使用多线程,每一个线程解析excel中的一个 ...

随机推荐

  1. H5表单基础知识(二)

    表单新增属性 <!--<input type="text" class="name" />--> <!-- placeholder ...

  2. 基础的shell脚本

    #! /bin/sha="hello world"echo "A is "   echo $a echo "<br />" ec ...

  3. 追加XML

    追加有两种情况,这个文档可能存在,也可能不存在 XmlDocument doc = new XmlDocument();XmlElement books; //将books声明在外边这样后面的代码才可 ...

  4. 对比springmvc与struts2

    转载:http://blog.csdn.net/chenleixing/article/details/44570681 1.Struts2是类级别的拦截, 一个类对应一个request上下文,Spr ...

  5. MySql和Sql的单行注释和多行注释的区别

    这里,请允许我把mysqlserver和sqlserver注释一起说明 1.单行注释 1)mysql中,可以用“-- ”和“ --”来注释 -- 方式1:单行注释 -- create database ...

  6. HDU 1934 特殊数字

    有两种车牌号.让你判断第二种是不是在第一种之后且在第一种出Kth之前的车牌号. 本解中是把前面的字母看成一位十进制的数.自己是一个26或者21进制的数.如果比较时有两种.那么第一种和第一种的最后一个比 ...

  7. learning uboot test command

    uboot commad test test - minimal test like /bin/sh so we can use test command to some judge for exam ...

  8. ACID测试标准

    缩写ACID代表原子性(atomicity).一致性(consistency).孤立性(isolation).持久性(duration) 通过了ACID测试的事物在多线程.并行处理或多用户环境中就是安 ...

  9. 在ant中将依赖jar包一并打包的方法

    一般jar包里面是不包含jar文件的,如果自己的类有依赖其他jar包,可以通过ant命令将这些jar包解析,然后和自己的class文件打在一起,命令如下: build.xml 1 2 3 4 5 6 ...

  10. Dev GridView-Bind Detail Grid during runtime

    Here is a simple example. ASPX <%@ Page Language="C#" AutoEventWireup="true" ...