多线程之CountDownLatch
来源:互联网 发布:tomcat能运行php吗 编辑:程序博客网 时间:2024/05/16 19:44
CountDownLatch:顾名思义为倒数计数器,主要作用是用于一个线程等待其他线程完成后执行。
其构造方法 public CountDownLatch(int count),中的count是指需要等待的线程数。
package demo.countdown;
import java.util.concurrent.CountDownLatch;
public class CountDownLatchTest {
private static CountDownLatch cd = new CountDownLatch(3);
static class ThreadA extends Thread{
String name;
public ThreadA(String name) {
super();
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread A running...."+name);
cd.countDown();
}
}
static class ThreadB extends Thread{
String name;
public ThreadB(String name) {
super();
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread B running...."+name);
cd.countDown();
}
}
static class ThreadC extends Thread{
String name;
public ThreadC(String name) {
super();
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread C running...."+name);
cd.countDown();
}
}
public static void main(String[] args) throws InterruptedException {
new ThreadA("WorkdA").start();
new ThreadB("WorkdB").start();
new ThreadC("WorkdC").start();
cd.await();
System.out.println("子线程已工作完成.....");
}
}
首先定义了一个CountDownLatch其中实例时定义了count=3,意思就是等待三个线程完成后,主线程才执行(这里的主线程就是其他或者一个线程)A B C三个线程就是子线程
子线程中调用一个countDown的方法,这个方法就是将count-1.
主线程调用await方法,将主线程阻塞在这里,直到count=0时再调用。
这里需要注意的是,如果子线程的数大于count的话,那么主线程会一直阻塞在那,这里不难理解,因为假设子线程的数是2,但是count=3,这样count永远不会是0。所以会阻塞在这里。
countDownLatch主要场景是我们实例化一些配置或者对象后,再执行我们后面的业务时,我们就可以用这个工具类来实现
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- JAVA多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之CountDownLatch
- Java多线程之----CountDownLatch
- Java多线程之CountDownLatch
- java多线程之CountDownLatch
- java多线程之CountDownLatch
- 多线程之CountDownLatch
- 多线程之CountDownLatch
- 多线程之CountDownLatch
- 多线程之CountDownLatch工具类
- Java多线程之CountDownLatch学习
- java 多线程之CountDownLatch用法
- java 多线程编程之CountDownLatch
- 商城项目分解-注册
- 【Scikit-Learn 中文文档】朴素贝叶斯
- 感谢凯哥自媒体,成就了现在的我!
- 可变参数列表码的剖析和自己的理解
- 手动搭建Kubernetes1.8高可用集群(3)Docker
- 多线程之CountDownLatch
- 分布式系统基本原理及高可用策略
- FL Studio双十二特价了!
- <jsp:include>和<%@include%>的区别
- 执行pip安装其他模块时,提示Unknown or unsupported command 'install'
- 过滤器
- Git学习笔记
- VS项目属性的一些配置项的总结(important)
- scala中extends和with的使用