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是线程并发工具类之 ...
随机推荐
- Java实现第八届蓝桥杯杨辉三角
杨辉三角 杨辉三角也叫帕斯卡三角,在很多数量关系中可以看到,十分重要. 第0行: 1 第1行: 1 1 第2行: 1 2 1 第3行: 1 3 3 1 第4行: 1 4 6 4 1 - 两边的元素都是 ...
- requireJS模块化
1. JavaScript里面js代码的写法:目标是解决冲突和依赖 函数式编程,全局函数和变量--很容易覆盖 对象的写法--也会从外面改变 命名空间:利用名称不同缓冲js代码的冲突---名称太长,不方 ...
- 涨见识了,在终端执行 Python 代码的 6 种方式!
原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...
- Android开源框架选择
Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「图片加载到底哪家强」 Android网络框架的封装 Android Volley+OkHttp3+Gson(Jackson ...
- Matplotlib 的正确使用方法,画一张好看的图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Python中文社区 本文用的数据如图所示,Dataframe中显示 ...
- javascript 面向对象学习(二)——原型与继承
什么是原型? 首先我们创建一个简单的空对象,再把它打印出来 var example = {} console.log(example) 结果如下: { __proto__: { constructor ...
- pc端网站如何自动跳转到移动wap端网站
<script type="text/javascript"> var uaTest = /Android|webOS|Windows Phone|iPhone|ucw ...
- 利用Jackson将数据转换为Json
1.确保相关依赖导入 2.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- 利用java从docx文档中提取文本内容
利用java从docx文档中提取文本内容 使用Apache的第三方jar包,地址为https://poi.apache.org/ docx文档内容如图: 目录结构: 每个文件夹的名称为日期加上来源,例 ...
- 单页面应用下刷新当前iframe
$('button.layui-btn-elastic-2').click(function(){ var srcIframe=$(".layui-side ul li dd"). ...