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();

}

}

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()方法.这个方法让线程进入休眠状态直 ...

随机推荐

[leetcode] Bitwise AND of Numbers Range

Bitwise AND of Numbers Range Given a range [m, n] where 0 <= m <= n <= 2147483647, return t ...

zoj 1081 判断点在多边形内

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...

&lpar;转&rpar;实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC

在使用Memcached时,一般实时读写的场景并不多见.但多是Memcached写入后,在一定时间后才会有读操作.但是如果应用场景,是写入后瞬间即会有读操作呢?似乎没有什么特别之处,我们依然可以这样写 ...

delphi获取mdb密码

function GetPasswordFromAccess(AFileName: string): string;var  myms: TMemoryStream;  b: array of Byt ...

JDK1&period;7 安装加&lpar;一劳永逸的环境配置&rpar;

1.去oracl官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html. ...

w7关闭休眠增加C盘容量

http://jingyan.baidu.com/article/f3ad7d0fc0992e09c2345b51.html powercfg -h off,即可关闭休眠功能 powercfg -h ...

看不到git远程分支

1.先用fetch命令更新remote索引 $ git fetch 2.再查看remote分支,发现已经可以看到目标分支 $ git branch -a 3.再切换分支 $ git checkout ...

ES5和ES6中关于import &amp&semi; export的书写方式的区别

ES6中输出变量的写法 情景1:单个变量 输出 export const less = 'less' 引用 import {less} from '../index.js' 情景2:多个变量 输出: ...

Linux下搭建lnmp环境

前提:假设阅读本文的读者已经拥有基本的linux使用技巧,能够解决系统安装问题,以及软件安装的技巧. 注意: 本文所涉及的主要安装包(需要下载使用的)安装包,在本文最后会给出百度云盘链接,需要使用的, ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值