zoukankan      html  css  js  c++  java
  • 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();
    } }
  • 相关阅读:
    论文笔记之:Speed Up Tracking by Ignoring Features
    深度学习中常见的几个基础概念
    (转)The AlphaGo Replication Wiki
    论文笔记之:Co-saliency Detection via A Self-paced Multiple-instance Learning Framework
    (转)CVPR 2016 Visual Tracking Paper Review
    论文笔记之:Generative Adversarial Text to Image Synthesis
    论文笔记之:Conditional Generative Adversarial Nets
    论文笔记之:Progressive Neural Network Google DeepMind
    (转)Let’s make a DQN 系列
    论文阅读之:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
  • 原文地址:https://www.cnblogs.com/miller-zou/p/6954119.html
Copyright © 2011-2022 走看看