Java并发之CyclicBarria的使用(二)
Java并发之CyclicBarria的使用(二)
一.简介
之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文章,为此笔者自己原创了一个CyclicBarria的用法的示例Demo, 在此声明,该Demo没有实际的价值,仅仅只是演示CyclicBarria的用法,希望加深读者对"循环栅栏"的用法加深理解。
二.使用
需求假设:在D盘下有一个test文件夹,我们要使用两个线程将文件夹A, B, 拷贝到test目录下,必须要等到两个文件夹都拷贝完毕,然后再将其删除。
public class CyclicBarriaTest {
static class ProcessDir extends Thread{
private CyclicBarrier cb;
private CountDownLatch cdl;
private String path;
private int num;
public ProcessDir(String path, CyclicBarrier cb, int num, CountDownLatch cdl){
this.num = num;
this.cb = cb;
this.path = path;
this.cdl = cdl;
}
@Override
public void run() {
try {
cb.await();
copyDir();
cb.await();
deleteDir();
} catch (Exception e) {
e.printStackTrace();
}finally{
cdl.countDown();
}
}
/**
* 拷贝文件夹
* @throws IOException
*/
public void copyDir() throws IOException{
if(num == 1){
FileUtils.copyDirectory(new File("D:/eclipse"), new File(path));
}
if(num == 2){
FileUtils.copyDirectory(new File("D:/maven"), new File(path));
}
}
/**
* 删除文件夹
* @throws IOException
*/
public void deleteDir() throws IOException{
if(num == 1){
FileUtils.deleteDirectory(new File("d:/test/eclipse"));
}
if(num == 2){
FileUtils.deleteDirectory(new File("d:/test/maven"));
}
}
}
static class ShowInfo implements Runnable{
private boolean flag;
public ShowInfo(boolean flag){
this.flag = flag;
}
@Override
public void run() {
if(flag){
System.out.println("所有的线程已经 准备完毕,开始执行拷贝");
flag = false;
}else{
System.out.println("数据拷贝完毕,开始执行删除");
}
}
}
public static void main(String[] args) throws InterruptedException {
CyclicBarrier cb = new CyclicBarrier(2, new ShowInfo(true));
CountDownLatch cdl = new CountDownLatch(2);
for(int i = 1; i <= 2; i++){
new ProcessDir("d:/test", cb, i, cdl).start();
}
cdl.await();
File file = new File("d:/test");
file.delete();
}
}
Java并发之CyclicBarria的使用(二)的更多相关文章
- Java并发之CyclicBarria的使用
Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主 ...
- Java并发之synchronized关键字深度解析(二)
前言 本文继续[Java并发之synchronized关键字深度解析(一)]一文而来,着重介绍synchronized几种锁的特性. 一.对象头结构及锁状态标识 synchronized关键字是如何实 ...
- Java并发之AQS原理解读(二)
上一篇: Java并发之AQS原理解读(一) 前言 本文从源码角度分析AQS独占锁工作原理,并介绍ReentranLock如何应用. 独占锁工作原理 独占锁即每次只有一个线程可以获得同一个锁资源. 获 ...
- java并发之固定对象与实例
java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...
- Java并发之BlockingQueue的使用
Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B, A线程每200ms就生成一个[0,100]之间的随机数, B线 ...
- 深入理解Java并发之synchronized实现原理
深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入 ...
- Java并发之Semaphore的使用
Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类 ...
- Java并发之CountDownLatch的使用
Java并发之CountDownLatch的使用 一. 简介 Java的并发包早在JDK5这个版本中就已经推出,而且Java的并发编程是几乎每个Java程序员都无法绕开的屏障.笔者今晚在家闲来无事,翻 ...
- java并发之hashmap源码
在上篇博客中分析了hashmap的用法,详情查看java并发之hashmap 本篇博客重点分析下hashmap的源码(基于JDK1.8) 一.成员变量 HashMap有以下主要的成员变量 /** * ...
随机推荐
- jquery--递增--年份的选择
<select id="select_year"></select> <script> $(document).ready(function() ...
- 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2020 和背包差不多 同样滚动数组 f[j]表示当前位置j份食物的最小价值 f[j]=min(f[j- ...
- DevExpress 控件使用技巧
DevExpress是非常主流的.NET控件,眼下全世界和中国都用非常多用户使用,只是因为是英文版,初次接触的同学可能会认为困难.这里就总结DevExpress常见的10个使用技巧. 1.TextEd ...
- Chem 3D中怎么创建立体模型
ChemDraw作为一款很受大家欢迎的化学绘图软件,其在绘制平面化学方面的功能已经非常的强大了,其实它也可以绘制3D图形.Chem 3D就是绘制3D图形的重要组件.而且为了满足不同的用户绘图的需求,可 ...
- IPOL图像处理分析经典在线(文献+源码)
网址: IPOL Journal · Image Processing On Line https://www.ipol.im/ 分类: 搜索: 下载文献和源码: NLM算法:IPOL Journal ...
- Java反射基础(一)
构造方法的获取 1. 四个方法:getConstructors()获取所有的构造方法: getConstructor(parameters)获取匹配参数的构造方法: getDeclaredCons ...
- 在ASP.NET MVC3 中利用JSONP跨域登录WEB系统
在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就 ...
- "_dns_free_resource_record", referenced from:问题
本文转载至 http://blog.csdn.net/woaifen3344/article/details/41309471 _dns_free_resource_r_dns_free环信SDK集成 ...
- Python之实现简单计算器功能
一,需求分析 要求计算一串包含数字+-*/()的类似于3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4)表达式的数值 二,知识点 正 ...
- IO流入门-第九章-BufferedReader_BufferedWriter复制
利用BufferedReader和BufferedWriter进行复制粘贴 import java.io.*; public class BufferedReader_BufferedWriterCo ...