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是线程并发工具类之 ...
随机推荐
- python numpy 库
引用文章:https://blog.csdn.net/xjl271314/article/details/80409034
- Python内置Turtle绘图库方法简介+多案例
urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 记一次@ResponseBody注解返回中文乱码的问题
Bug场景 前端AJax $.ajax({ url: '$!{request.getContextPath()}/XX/save.do', type: 'post', dataType: 'json' ...
- 微信小程序公司开发前必读
事前准备: 微信小程序需要https请求,需要准备 1:备案的域名:由于备案需要一定的时间,所以请事先准备 2:受认可的证书 一个账号只能发布一个小程序,如需发布多个,请申请多个账号. 个人开发和学习 ...
- Nginx思维导图
1. Nginx简介 1.1 nginx概述 1.2 nginx的安装及程序环境 1.3 零复制&五种IO模型 1.4 nginx的基本配置 2. Nginx配置详解 2.1 main配置段详 ...
- 手把手教你学Numpy,这些api不容错过
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Numpy专题的第5篇文章,我们来继续学习Numpy当中一些常用的数学和统计函数. 基本统计方法 在日常的工作当中,我们经常需要通过一 ...
- matlab 梯度法(最速下降法)
norm(A,p)当A是向量时norm(A,p) Returns sum(abs(A).^zhip)^(/p), for any <= p <= ∞.norm(A) Returns nor ...
- PAI-AutoLearning 图像分类使用教程
概述 PAI AutoLearning(简称PAI AL)自动学习支持在线标注.自动模型训练.超参优化以及模型评估.在平台上只需准备少量标注数据,设置训练时长即可得到深度优化的模型.同时自动学习PAI ...
- if test表达式逻辑判断不能用&&
用&&会报错 用and 例如: <if test="age!=null and name!=null">