java并发初探CountDownLatch

CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作。

当前前程A调用CountDownLatch的await方法进入阻塞(LockSupportd的park方法),

其他线程调用CountDownLatch调用countDown(),CountDownLatch的内部变量

count为零时,线程A唤醒。

  1. * A synchronization aid that allows one or more threads to wait until
  2. * a set of operations being performed in other threads completes.
  3. *

例子

  1. package com.java.javabase.thread.base.concurrent.lock;
  2. import lombok.extern.slf4j.Slf4j;
  3. import java.util.concurrent.CountDownLatch;
  4. /**
  5. * @author
  6. */
  7. @Slf4j
  8. public class CountDownLatchTest {
  9. private static CountDownLatch countDownLatch = new CountDownLatch(5);
  10. public static void main(String[] args) {
  11. new Thread() {
  12. @Override
  13. public void run() {
  14. try {
  15. log.info("thread {} call wait ",Thread.currentThread().getName());
  16. sleep(1000);
  17. countDownLatch.await();
  18. log.info("thread {} end ",Thread.currentThread().getName());
  19. } catch (InterruptedException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }.start();
  24. for (int i = 0; i < 5; i++) {
  25. new Thread() {
  26. @Override
  27. public void run() {
  28. log.info("thread {} run ",Thread.currentThread().getName());
  29. try {
  30. sleep(1000);
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. countDownLatch.countDown();
  35. }
  36. }.start();
  37. }
  38. log.info("current thread is {}",Thread.currentThread().getName());
  39. try {
  40. countDownLatch.await();
  41. log.info("thread is {} end",Thread.currentThread().getName());
  42. } catch (InterruptedException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }

例子结果

  1. 2019-08-09 17:40:10,492 [Thread-1] INFO CountDownLatchTest - thread Thread-1 run
  2. 2019-08-09 17:40:10,492 [Thread-3] INFO CountDownLatchTest - thread Thread-3 run
  3. 2019-08-09 17:40:10,492 [Thread-2] INFO CountDownLatchTest - thread Thread-2 run
  4. 2019-08-09 17:40:10,492 [Thread-0] INFO CountDownLatchTest - thread Thread-0 call wait
  5. 2019-08-09 17:40:10,492 [main] INFO CountDownLatchTest - current thread is main
  6. 2019-08-09 17:40:10,492 [Thread-4] INFO CountDownLatchTest - thread Thread-4 run
  7. 2019-08-09 17:40:10,492 [Thread-5] INFO CountDownLatchTest - thread Thread-5 run
  8. 2019-08-09 17:40:11,491 [main] INFO CountDownLatchTest - thread is main end
  9. 2019-08-09 17:40:11,491 [Thread-0] INFO CountDownLatchTest - thread Thread-0 end

java并发初探CountDownLatch的更多相关文章

  1. java并发初探ConcurrentSkipListMap

    java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...

  2. java并发初探ConcurrentHashMap

    java并发初探ConcurrentHashMap Doug Lea在java并发上创造了不可磨灭的功劳,ConcurrentHashMap体现这位大师的非凡能力. 1.8中ConcurrentHas ...

  3. java并发初探ThreadPoolExecutor拒绝策略

    java并发初探ThreadPoolExecutor拒绝策略 ThreadPoolExecuter构造器 corePoolSize是核心线程池,就是常驻线程池数量: maximumPoolSize是最 ...

  4. java并发初探CyclicBarrier

    java并发初探CyclicBarrier CyclicBarrier的作用 CyclicBarrier,"循环屏障"的作用就是一系列的线程等待直至达到屏障的"瓶颈点&q ...

  5. java并发初探ReentrantWriteReadLock

    java并发初探ReentrantWriteReadLock ReenWriteReadLock类的优秀博客 ReentrantReadWriteLock读写锁详解 Java多线程系列--" ...

  6. java并发中CountDownLatch的使用

    文章目录 主线程等待子线程全都结束之后再开始运行 等待所有线程都准备好再一起执行 停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制 ...

  7. JAVA并发,CountDownLatch使用

    该文章转自:http://www.itzhai.com/the-introduction-and-use-of-a-countdownlatch.html CountDownLatch 1.类介绍 一 ...

  8. Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理

    前言: 如果说J.U.C包下的核心是什么?那我想答案只有一个就是AQS.那么AQS是什么呢?接下来让我们一起揭开AQS的神秘面纱 AQS是什么? AQS是AbstractQueuedSynchroni ...

  9. Java并发编程-CountDownLatch

    基于AQS的前世今生,来学习并发工具类CountDownLatch.本文将从CountDownLatch的应用场景.源码原理解析来学习这个并发工具类. 1. 应用场景 CountDownLatch是并 ...

随机推荐

  1. pandas read excel or csv

    import pandas as pd """pandas doc:df.dtypes 查看数据每column 数据类型 id int64x0 float64df.rei ...

  2. JS-this的使用

    做前端开发已经半年之多了,前几天看见apply时心生疑惑,于是查阅了好多资料但还是不太理解,只知道是源于this的问题,今天偶然看到了阮一峰大佬的讲解js中的this问题(http://www.rua ...

  3. Unix套接字接口

    简介 套接字是操作系统中用于网络通信的重要结构,它是建立在网络体系结构的传输层,用于主机之间数据的发送和接收,像web中使用的http协议便是建立在socket之上的.这一节主要讨论网络套接字. 套接 ...

  4. 使用UUID防止文件重名

    在原文件名的基础上加 UUID.randomUUID().toString()

  5. JS中bool值转换与比较

    前言 首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 false, 其他(包括{}, [], Infinity)为true. 可以使 ...

  6. PHP中数字转为百分位,千分位,万分位。。。

    今天做项目中,需要将文章点击量显示在页面中,需求中给的是多少多少万,虽然不是什么难事,但做程序员这么久了,需要考虑的不再是简单的实现,而且有效率和快捷, 虽然PHP自带的函数有number_forma ...

  7. DVWA实验之Brute Force(暴力破解)- Low

    DVWA实验之Brute Force-暴力破解- Low     这里开始DVWA的相关实验~   有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2 ...

  8. C#开发点滴记录

    1.开发windows服务程序,不应该在程序中调用windform相关的方法与类库,会产生未知的异常,windows服务中是可以产生日志文件的,会生成在安装服务的当前路径下面,比如服务为D:/MySe ...

  9. 整个DIV 块垂直居中

    <!-- 垂直居中一定要有确定大小的 父容器(根) html,body 一般100% --> <!DOCTYPE html> <html lang="en&qu ...

  10. Educational Codeforces Round 79 (Rated for Div. 2) - D. Santa's Bot(数论)

    题意:有$n$个孩子,第$i$个孩子有$k[i]$件想要的礼物,第$j$个礼物为$a[i][j]$,现在随机挑一个孩子,从他想要的礼物里面随机挑一个,然后送给另一个孩子$($这个孩子可以和第一个孩子是 ...