原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867656.html

Java线程--CountDownLatch使用, 代码里头有详细注释:

public static void main(String[] args) throws InterruptedException {
/**
* 基于计数器的线程等待-完毕执行控制器
* 线程A调用await()方法后, 只有计数为0, 线程A才能继续执行, 否则将一直挂起
*/
CountDownLatch countDownLatch = new CountDownLatch(2);
System.out.println("主线程开始执行");
ExecutorService service1 = Executors.newSingleThreadExecutor();
service1.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 计数器的值减1
*/
countDownLatch.countDown();
}
});
service1.shutdown(); ExecutorService service2 = Executors.newSingleThreadExecutor();
service2.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 计数器的值减1
*/
System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
countDownLatch.countDown();
}
});
service2.shutdown();
System.out.println("等待两个线程执行完毕…… ……");
try {
/**
* 主线程里面调用的await()方法, 那么主线程在这里会被挂起,
* 等到countDownLatch的计数为0的时候再继续回来执行
*/
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("两个子线程都执行完毕,继续执行主线程");
}

打印如下:

主线程开始执行
等待两个线程执行完毕…… ……
子线程:pool-1-thread-1执行
子线程:pool-2-thread-1执行
两个子线程都执行完毕,继续执行主线程

Java线程--CountDownLatch使用的更多相关文章

  1. Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析

    1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...

  2. 转:java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例

    java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例 1.CountDownLatch:一个同步工具类,它允许一个或多个线程一 ...

  3. 【转载】 Java线程面试题 Top 50

    Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...

  4. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

  5. java 线程安全不线程不安全

    经常看到一些类,有的说线程安全,有的说线程不安全,顿时懵逼. 线程安全不安全,主要是在多线程执行的情况下,如果由于线程之间抢占资源而造成程序的bug即为线程不安全,下面就拿arraylist 和Vec ...

  6. (转载)JAVA线程池管理

    平时的开发中线程是个少不了的东西,比如tomcat里的servlet就是线程,没有线程我们如何提供多用户访问呢?不过很多刚开始接触线程的开发攻城师却在这个上面吃了不少苦头.怎么做一套简便的线程开发模式 ...

  7. java 线程协作 wait(等待)与 notiy(通知)

    一.wait().notify()和notifyAll() 为了更好的支持多线程之间的协作,JDK提供了三个重要的本地方法 //调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对 ...

  8. Java线程面试题 Top 50 (转载)

    转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html   本文由 ...

  9. Java线程池的那些事

    熟悉java多线程的朋友一定十分了解java的线程池,jdk中的核心实现类为java.util.concurrent.ThreadPoolExecutor.大家可能了解到它的原理,甚至看过它的源码:但 ...

随机推荐

  1. Java 中 this 和 super 的用法及案例

    this this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this 的用法在 Java 中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this 相当于是指向 ...

  2. .NET 微服务——CI/CD(2):自动打包镜像

    准备工作 一.开启docker的tcp 我的服务器是linux,以端口2376为例,找到docker.service,在ExecStart下新增这段代码即可: -H tcp://0.0.0.0:237 ...

  3. Ranger-AdminServer安装(开启Kerberos)

    Ranger-AdminServer安装, 同时开启Kerberos安全模式, 基于ranger版本0.7.0. 安装规划 10.43.159.240 zdh-240 10.43.159.245 zd ...

  4. 查询 Oralce 某 schema 所拥有的权限

    --https://dba.stackexchange.com/questions/14901/oracle-list-users-with-access-to-certain-tables sele ...

  5. C# 使用vs2017 创建类 时 注意点

    1.创建新类后,在其他类无法new 这个新创建的类 ,怎么回事? 原因很简单,创建类时不带修饰符,默认是被保护的类 上图为创建类后的默认代码 ,没有修饰符 ,在其他类中无法引入改类的命名空间,会显示找 ...

  6. SYCOJ304末尾0的个数

    https://oj.shiyancang.cn/Problem/304.html 首先数据范围不可能算出来的,那么就要看数的性质. 0是怎么来的首先我们知道,有一个0,就必然会有一个5和2. n!在 ...

  7. 软件开发架构与网络之OSI七层协议(五层)

    本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...

  8. 【C】C语言大作业——学生学籍管理系统

    文章目录 学生管理系统 界面 主界面 登陆界面 注册界面 管理界面 学生界面 退出界面 链接 注意 学生管理系统 学C语言时写的一个大作业,弄了一个带图形界面的,使用的是VS配合EasyX图形库进行实 ...

  9. JDK原子操作类

    在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型.原子更新数组.原子更新引用和原子更新属性(字段).Atomic包里的类基本都是使用Unsafe实现的包装类. ...

  10. nginx多ip多端口多域名方式

    目录 一:Nginx虚拟主机 1.基于ip的方式 2.基于多端口的方式 3.基于多域名的方式 一:Nginx虚拟主机 基于多IP的方式 基于多端口的方式 基于多域名的方式 1.基于ip的方式 [roo ...