CountDownLatch 线程工具类
CountDownLatch:概念是,允许一个或多个线程等待其他线程完成操作;
在线程基础知识中,学习过线程的join方法,当前线程阻塞等待join线程执行完毕才能执行;
测试代码如下:
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread("Thread001") {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"操作1");
}
};
Thread t2 = new Thread("Thread002") {
@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName()+"操作2");
t1.join();
System.out.println("========这是第二部分内容===========");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
t2.start();
t2.join();
System.out.println("线程执行完毕");
}
上面代码的流程是:1. t1和t2线程开启之后,t2.join(),主线程阻塞;
2.线程t2中,线程t1.join(),线程t2成阻塞状态;
3.等待t1结束玩成,t2才能继续执行
4.t2线程执行完毕,最后主线程执行
CountDownLatch提供了await()方法,和countDown()方法来进行线程的阻塞;await()方法阻塞当前线程,直到countDown()的个数和CountDownLatch的初始化值相同时;
public static void main(String[] args) {
try {
CountDownLatch cdt = new CountDownLatch(2);
Thread t1 = new Thread("Thread001") {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行了!");
cdt.countDown();
}
};
Thread t2 = new Thread("Thread002") {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行了!");
cdt.countDown();
}
};
t1.start();
t2.start();
cdt.await();
System.out.println("主线程执行");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
}
CountDownLatch 线程工具类的更多相关文章
- 线程工具类 - CountDownLatch(倒计时器)
CountDownLatch官方文档 一.原理 CountDownLatch是一个非常实用的多线程控制工具类.Count Down在英文中意为倒计时,Latch意为门闩,可以简单的将CountDown ...
- java并发学习--第七章 JDK提供的线程工具类
一.ThreadLocal ThreadLocal类用于隔离多线程中使用的对象,为ThreadLocal类中传递的泛型就是要隔离的对象,简单的来说:如果我们在主线程创建了一个对象,并且需要给下面的多线 ...
- 线程工具类 - CyclicBarrier(循环栅栏)
CyclicBarrier官方文档 一.原理 CyclicBarrier是另外一种多线程并发控制实用工具.它和CountDownLatch非常类似,它也可以实现线程的计数等待,但它的功能比CountD ...
- 廖雪峰Java11多线程编程-4线程工具类-1ThreadLocal
多线程是Java实现多任务的基础: Thread ExecutorService ScheduledThreadPool Fork/Join Thread对象代表一个线程:调用Tread.curren ...
- 线程工具类 - Semaphore(信号量)
Semaphore官方文档 一.使用信号量实现线程间的通信 /** * Demo:使用信号量实现线程间通信*/ public class SemaphoreDemo { public static v ...
- 线程工具类ThreadUtils
package yqw.java.util; public class ThreadUtils { /** * showThreadInfo * * @return ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- JUC——线程同步辅助工具类(Semaphore,CountDownLatch,CyclicBarrier)
锁的机制从整体的运行转态来讲核心就是:阻塞,解除阻塞,但是如果仅仅是这点功能,那么JUC并不能称为一个优秀的线程开发框架,然而是因为在juc里面提供了大量方便的同步工具辅助类. Semaphore信号 ...
- java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
一.CyclicBarrier (原文链接:http://www.studyshare.cn/blog-front/blog/index ) 1.定义 CyclicBarrier是线程并发工具类之 ...
随机推荐
- 08_提升方法_AdaBoost算法
今天是2020年2月24日星期一.一个又一个意外因素串连起2020这不平凡的一年,多么希望时间能够倒退.曾经觉得电视上科比的画面多么熟悉,现在全成了陌生和追忆. GitHub:https://gith ...
- js数组的常见操作( push、pop、unshift、shift、splice、concat、 join)的用法
1.数组添加删除 头部或尾部( push().pop().unshift().shift() ) 例2.数组尾部添加 push()方法可向数组的末尾添加一个或多个元素,并返回新的长度 语法:array ...
- protected关键字对父子成员变量的影响
include<iostream> #include<string> using namespace std; class parent{ protected: int mv; ...
- 线程的状态及sleep、wait等方法的区别
1.创建状态 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态.它保持这个状态直到程序 start() 这个线程. 2.就绪状态 当线程对象调用了start ...
- RabbitMQ系列之【设置RabbitMQ远程ip登录】
由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq. ...
- 面向对象存储框架:Obase快速入门
在项目中完成对象建模后,可以使用Obase来进行对象的管理(例如对象持久化),本篇教程将创建一个.NET Core控制台应用,来展示Obase的配置和对象的增删改查操作.本篇教程旨在指引简单入门. 本 ...
- brother b-PAC sdk开发包
brother b-PAC sdk开发包 https://download.brother.com/welcome/dlfp100607/bsdkw32031eu.exe https://www.br ...
- Flink 集群搭建,Standalone,集群部署,HA高可用部署
基础环境 准备3台虚拟机 配置无密码登录 配置方法:https://ipooli.com/2020/04/linux_host/ 并且做好主机映射. 下载Flink https://www.apach ...
- 一文入门:XGBoost与手推二阶导
作者前言 在2020年还在整理XGB的算法,其实已经有点过时了..不过,主要是为了学习算法嘛.现在的大数据竞赛,XGB基本上已经全面被LGB模型取代了,这里主要是学习一下Boost算法.之前已经在其他 ...
- mock api测试demo
前言 本测试demo基于Spring框架测试,这几个月也是刚刚接触Spring的项目.如果不对的地方请多谅解. 正文 1.创建测试类,添加注解 @RunWith(SpringRunner.class) ...