Java并发之CountDownLatch的使用
2017-06-06 23:04
471 查看
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,笔者认为最合适不过了。我们直接上代码:
一. 简介
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、CyclicBarrier、Semaphore)并发编程
- Java 并发编程实战学习笔记——CountDownLatch的使用
- Java并发之CountDownLatch的使用和源码解析
- [Java并发]使用CountDownLatch和CyclicBarrier等待多线程完成
- java并发中CountDownLatch的使用示例
- Java并发Concurrent包的锁(六)——CountDownLatch源码分析及使用
- java并发包里CountDownLatch的使用详解
- Java并发基础(五)-CountDownLatch、CyclocBarrier、Phaser的使用
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- Java中的并发工具CountDownLatch、CyclicBarrier、Semapphore使用详解
- 转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
- java并发学习之CountDownLatch
- java并发之CountDownLatch
- java 线程 新类库中的构件 countDownLatch 使用
- Java线程知识__其他几种线程同步的工具类的使用(CyclicBarrier,CountDownLatch,Exchanger)
- Java并发之CountDownLatch、CyclicBarrier、Semaphore
- Java线程(十一):CountDownLatch-线程并发的发令枪
- Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务
- Java 并发专题 :闭锁 CountDownLatch 之一家人一起吃个饭