基本使用

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;public class ListAdd2 {private volatile static List list = new ArrayList(); public void add(){list.add("cxf");}public int size(){return list.size();}public static void main(String[] args) {final ListAdd2 list2 = new ListAdd2();这个1代表发一次。。如果是2,countDown()执行两次才会通知。final CountDownLatch countDownLatch = new CountDownLatch(1);Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {try {for(int i = 0; i <10; i++){list2.add();System.out.println("当前线程:" + Thread.currentThread().getName() + "添加了一个元素..");Thread.sleep(500);if(list2.size() == 5){System.out.println("已经发出通知..");countDownLatch.countDown();}}                      } catch (InterruptedException e) {e.printStackTrace();}}}, "t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {if(list2.size() != 5){try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("当前线程:" + Thread.currentThread().getName() + "收到通知线程停止..");throw new RuntimeException();}}, "t2"); t2.start();t1.start();}}

结果

当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
Exception in thread "t2" java.lang.RuntimeExceptionat java.lang.Thread.run(Thread.java:748)
已经发出通知..
当前线程:t1添加了一个元素..
当前线程:t2收到通知线程停止..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..
当前线程:t1添加了一个元素..Process finished with exit code 0

总结

new  CountDownLatch(1);//这个1代表发一次通知。。如果是2,需要调用countDown()两次才会通知。

java的CountDownLatch使用相关推荐

  1. Java的CountDownLatch和CyclicBarrier的理解和区别

    CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...

  2. 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程

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

  3. 同步机制之--java之CountDownLatch闭锁

    CountDownLatch闭锁 1.类介绍 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给定的计数初始化 CountDownLatch.CountDown ...

  4. JAVA多线程-CountDownLatch计数器

    一.概述 CountDownLatch是一个同步工具类,它允许一个或多个线程等待其他线程执行完操作之后再继续执行.通常用于控制多个线程的执行顺序. 二.基本原理 我们可以把CountDownLatch ...

  5. Java并发——CountDownLatch

    CountDownLatch CountDownLatch是Java并发中常用的一个工具类,通常称为锁存器latch,作用为同步一个或多个任务,强制等待指定任务执行完成.即多线程中控制一个或多个线程去 ...

  6. Java中CountDownLatch类

     创建CountDownLatch对象时,会传入一个count数值,该对象每次调用countDown()方法会使count -- ,就是count每次减1; 调用await()方法,程序会阻塞等待,当 ...

  7. Java多线程-CountDownLatch用法

    CountDownLatch 可以立即看作一个计数器,不过计数是原子操作,也就是说同一时间只有一个线程能够操作该计数器: 我们先看看该类常用的几个方法: 你可以给它设定一个数目,调用该类await方法 ...

  8. Java随笔-CountDownLatch

    概述 CountDownLatch其实就是一个计数器,用来同步一个或多个任务,强制任务按步骤执行,多用来协调多线程.也就是一个任务想要执行,必须要等其他任务执行完后才能执行. CountDownLat ...

  9. java异步处理同步化_java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring Even...

    异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 正常处理逻辑 触发异步操作,然后传递一个唯一标识. 等到异步结果返回,根据传入的唯一标识,匹配此次结果. 如何转换为同步 ...

最新文章

  1. 图片基础知识梳理(3) BitmapBitmapFactory 解析
  2. AgileEAS.NET平台开发实例-药店系统-报表开发(上)
  3. 2018年计算机学校迎新标语,2018大学新生开学迎新标语大全 创意迎新横幅标语
  4. 运行Angular项目后自动打开网页
  5. 常用,好用的js代码
  6. 一个绚丽的loading动效分析与实现!
  7. 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头
  8. chrome 控制台信息获取 python_通过chrome浏览器控制台(Console)进行PHP Debug的方法
  9. Js中函数式编程的理解
  10. 《Java编程思想》读书笔记(14)
  11. Allegro设置尺寸单位milmm
  12. 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!
  13. jQuery- 跟着李南江学编程
  14. mysql创建索引视图_mysql中创建视图、索引
  15. 上海-苏州 100公里徒步旅行心情分享(二)
  16. python画布删除图形_Matplotlib在savefig之后从画布中清除旧图形
  17. 【思维导图】canny滤波 原理步骤细致剖析
  18. 解析html,批量下载图片(java实现)
  19. java后台证件号15转18位
  20. 标准IP数据包是否保证数据部分的正确性?

热门文章

  1. 获取客户端IP和MAC地址
  2. Spring (1) 认识Spring、 介绍Spring特点、解答为什么学习Spring
  3. php在线客服系统源码_在线客服系统物流行业解决方案
  4. opengl游戏引擎源码_UE4渲染引擎模块简介(1)
  5. c++编程例子_如何开始厉害的C语言编程?大神都是这样开始的!
  6. android网络请求流程图,Android OKHttp系列1-流程总结
  7. php e all e notic,error_reporting(E_ALL ^ E_NOTICE)详细说明 | 慢生活的记忆
  8. ddr4 lpddr4区别_iFixit 拆解 iPhone 12 系列:仍使用 LPDDR4 内存 | 爱搞机
  9. dropout的原理
  10. python教程怎么抓起数据_介绍python 数据抓取三种方法