Java并发之CountDownLatch的使用
Java并发之CountDownLatch的使用
一. 简介
Java的并发包早在JDK5这个版本中就已经推出,而且Java的并发编程是几乎每个Java程序员都无法绕开的屏障。笔者今晚在家闲来无事,翻看了以前的博客,发现好久都没有写过博客,就想着写点东西,写点什么好了,思来想去很久,决定在这段时间里写写关于Java并发相关的东西。由于是突然兴起,所有就没有什么规划,想到什么就写点什么吧,没想到首先想到的就是CountDownLatch的这个类,那就说说这个类吧。
二. CountDownLatch的使用
例如有这么一个需求:要删除一个文件夹A, 文件夹下有三个文件夹,分别为B, C, D,大家都知道,我们要删除文件夹A, 就必须先删除B, C,D这三个文件夹,我们分别启动三个线程分别删除B, C, D, 最后再删除A,我们再假设B, C, D的大小差距很大,那么每个线程执行的时间肯定不一样,我们该如何保证在删除A的时候,B, C, D已经删除了呢?此时用CountDownLatch,笔者认为最合适不过了。我们直接上代码:
public class CountDownLatchTest {
static class DeleteInnerDir extends Thread{
private CountDownLatch cdl;
private String path;
public DeleteInnerDir(CountDownLatch cdl, String path){
this.cdl = cdl;
this.path = path;
}
@Override
public void run() {
try {
FileUtils.deleteDirectory(new File(path));
System.out.println(Thread.currentThread().getName() + " 操作成功...");
} catch (IOException e) {
e.printStackTrace();
}finally{
cdl.countDown(); //将数字 -1
}
}
}
public static void main(String[] args) throws Exception {
//表示有三个线程来执行,内部维持着一个数字3,当执行等待await()方法的时候,
//每个线程执行一次countDown()方法,将数字 -1, 当数字为0的时候,就接着执行
CountDownLatch cdl = new CountDownLatch(3);
Thread t1 = new DeleteInnerDir(cdl, "d:/test/mavne");
Thread t2 = new DeleteInnerDir(cdl, "d:/test/eclipse");
Thread t3 = new DeleteInnerDir(cd1, "d:/test/tomcat");
t1.start();
t2.start();
t3.start();
System.out.println("开始等待。。。。");
cdl.await();
System.out.println("等待结束。。。。。");
File file = new File("d:/test");
file.delete();
}
}
Java并发之CountDownLatch的使用的更多相关文章
- Java并发之CountDownLatch 多功能同步工具类
package com.thread.test.thread; import java.util.Random; import java.util.concurrent.*; /** * CountD ...
- Java并发之CountDownLatch工具类
一.CountDownLatch工具类介绍 CountDownLatch类是Java并发工具常用的四大工具之一,CountDownLatch允许一个或者多个线程等待其他线程完成工作.假设我们有这样的一 ...
- Java并发之CountDownLatch
CountDownLatch是Java concurrent包下的一个同步工具.它可以让一个(或多个)线程等待,直到其他线程中的某些操作完成. 本质上是一个信号量,我们把它比作一个有N个插销的大门,它 ...
- java并发之CountDownLatch、Semaphore和CyclicBarrier
JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch Java之CountDownLatc ...
- Java并发之CountDownLatch、CyclicBarrier和Semaphore
CountDownLatch 是能使一组线程等另一组线程都跑完了再继续跑:CyclicBarrier 能够使一组线程在一个时间点上达到同步,可以是一起开始执行全部任务或者一部分任务. CountDow ...
- 转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch CountDownLatch是一个计 ...
- Java并发之CyclicBarrier、CountDownLatch、Phaser
在Java多线程编程中,经常会需要我们控制并发流程,等其他线程执行完毕,或者分阶段执行.Java在1.5的juc中引入了CountDownLatch和CyclicBarrier,1.7中又引入了Pha ...
- java并发之同步辅助类CyclicBarrier和CountDownLatch
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...
- java并发之同步辅助类CountDownLatch
CountDownLatch 含义: CountDownLatch可以理解为一个计数器在初始化时设置初始值,当一个线程需要等待某些操作先完成时,需要调用await()方法.这个方法让线程进入休眠状态直 ...
随机推荐
- Text类型的字段进行数据替换
一.text不大于8000 varchar和nvarchar类型是支持replace函数的,所以如果你的text不超过8000,可以先转换成前面两种类型再使用replace. UPDATE News ...
- Centos 下面安装 docker
试过了虚拟机VM ,今天尝试在虚拟机centos 中安装 docker ,入门是看的阮一峰的http://www.ruanyifeng.com/blog/2018/02/docker-tutorial ...
- Json.net操作json
string str="{\"size\":15,\"query\":{\"match\":{\"data.query. ...
- ie tbody table 兼容方法
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下 Js代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...
- Android 7.1.1 锁屏界面启动流程
前几天遇到一个低概率复现锁屏界面不显示,仅仅显示状态栏的问题,跟了下锁屏界面启动显示的流程,在这分享下,也方便以后自己查看.前面简介了下Zygote启动流程, Zygote进程启动后会首先创建一个Sy ...
- Java知识点梳理——多态
1.定义:多态是同一个行为具有多个不同表现形式或形态的能力,即一个接口不同的实例执行不同的操作: 2.优点:消除类型之间的耦合关系.可替换性.可扩展性.接口性.灵活性.简化性: 3.多态存在的3个必要 ...
- OSX终端 命令行的一些基本操作
本文转载至 http://blog.csdn.net/xdrt81y/article/details/24058959 osx终端命令 OSX终端 命令行的一些基本操作终端 命令行的一些基本操作很多朋 ...
- CNBlog客户端--第二阶段记录
开始 先给大家看一下我最近的进度,由于最近事比较多,所以这块的精力就相对较少了!但是还是有成绩的!!大家先看效果图吧! 这个优化之后的博客内容显示,还有增加了评论显示页面!! 这个是设置页面,还有一些 ...
- python 清华镜像pip install
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple
- 全局最小割模板(定S,不定T,找最小割)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...