Java并发之CyclicBarria的使用(二)
2024-09-01 06:49:35
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();
}
}
最新文章
- 引用Microsoft.Office.Interop.Excel出现的问题
- UVALive 6916---Punching Robot(卢卡斯+容斥)
- 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇
- Excel 转Latex 及tex表格的处理 总结
- 把 Mac 上的 bash 换成 zsh
- Impossible to load an image in xcassets on bundle
- 从走出校门到Java实习生生活
- Java静态代码分析工具——FindBugs插件的安装与使用
- SVN 记录冲突、忽略
- (0)图像处理opengl 写在前面的话
- replicate-do-db参数引起的MySQL复制错误及处理办法
- 转:在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程
- linux环境c++开发:ubuntu12.04使用llvm3.4.2
- 聊聊单元測试(一)——EasyMock
- MBProgressHUD各种样式用法
- jQuery:deferred [转]
- 基于前后端分离的身份认证方式——JWT
- 3;XHTML排列清单控制标记
- 动态sql and在前 逗号在后
- IoC之AutoFac(一)——简单使用和组件注册
热门文章
- 一个共通的viewModel搞定所有的分页查询一览及数据导出(easyui + knockoutjs + mvc4.0)
- JSP数据库连接成功
- Unity3D和网页数据交互的基本原理
- Python_selenium之处理Alert窗
- Eclipse设置护眼背景
- linux配置网关
- AndroidManifest.xml文件详解(activity)(二)
- DotNet软件开发框架
- [Go语言]从Docker源码学习Go——指针和Structs
- [LintCode] 带重复元素的排列