phaser
来源:互联网 发布:淘宝汽车配件保证金 编辑:程序博客网 时间:2024/06/05 02:15
创建三个线程在三个目录里查找一天以内修改过的以log结尾的文件并打印出来,
线程与线程之间通过phaser来保持同步点
package com.brendan.cn.concurrent.phaser;import java.io.File;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.Phaser;import java.util.concurrent.TimeUnit;public class FileSearch implements Runnable { private String initPath;// 查找路径 private String end;// 文件后缀 private List<String> results;// 结果集 private Phaser phaser; public FileSearch(String initPath, String end, Phaser phaser) { this.initPath = initPath; this.end = end; this.phaser = phaser; this.results = new ArrayList<String>(); } //递归遍历文件夹 private void direactoryProcess(File file) { File list[] = file.listFiles(); if (list != null) { for (File file2 : list) { if (file2.isDirectory()) { direactoryProcess(file2); } else { fileProcess(file2); } } } } //将每个以end结尾的文件的绝对路径加入result集合里 private void fileProcess(File file) { if (file.getName().endsWith(end)) { results.add(file.getAbsolutePath()); } } //过滤result中的文件集合,找出在一天以内修改过的文件并返回 private void filterResult() { List<String> newResult = new ArrayList<String>(); long actualDate = new Date().getTime(); for (int i = 0; i < results.size(); i++) { File file = new File(results.get(i)); long lastModifyTime = file.lastModified(); //一天以内修改过的文件 if (actualDate - lastModifyTime < TimeUnit.MICROSECONDS.convert(1, TimeUnit.DAYS)) { newResult.add(results.get(i)); } } results = newResult; } //检查结果集中是否为空集合 private boolean checkResults() { if (results.isEmpty()) { System.out.println(Thread.currentThread().getName() + ": Phase " + phaser.getPhase() + " 0 result"); System.out.println(Thread.currentThread().getName() + ": Phase " + phaser.getPhase() + " end"); phaser.arriveAndDeregister(); return false; } else { System.out.println(Thread.currentThread().getName() + ": Phase " + phaser.getPhase() + " " + results.size() + " result"); phaser.arriveAndAwaitAdvance(); return true; } } //打印结果集中文件路径 private void showInfo() { for (int i = 0; i < results.size(); i++) { System.out.println(Thread.currentThread().getName() + ":" + results.get(i)); } phaser.arriveAndAwaitAdvance(); } @Override public void run() { phaser.arriveAndAwaitAdvance(); System.out.println(Thread.currentThread().getName()+": Starting"); File file=new File(initPath); if(file.isDirectory()){ direactoryProcess(file); } if(!checkResults()){ return; } filterResult(); if(!checkResults()){ return; } showInfo(); phaser.arriveAndDeregister(); System.out.println(Thread.currentThread().getName()+": Work completed"); }}
package com.brendan.cn.concurrent.phaser;import java.util.concurrent.Phaser;public class PhaserMain {public static void main(String[] args) { Phaser phaser=new Phaser(3); FileSearch system=new FileSearch("E:\\aa", "log", phaser); FileSearch apps=new FileSearch("E:\\bb", "log", phaser); FileSearch documents=new FileSearch("E:\\cc", "log", phaser); Thread systemThread=new Thread(system, "system"); systemThread.start(); Thread appsThread=new Thread(apps, "apps"); appsThread.start(); Thread documentsThread=new Thread(documents, "documents"); documentsThread.start(); try { systemThread.join(); appsThread.join(); documentsThread.join(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Terminated:"+ phaser.isTerminated());}}
转载自
http://blog.csdn.net/junshuaizhang/article/details/39933717
阅读全文
0 0
- Phaser
- Phaser
- Phaser
- phaser
- Class Phaser
- java Phaser
- phaser入门教程
- Phaser入门教程
- phaser入门教程
- Phaser分析
- phaser随记
- Phaser.js 官方中文文档 phaser.io
- Java线程之Phaser
- jdk7的Phaser
- Java线程:Phaser
- Phaser实现源码剖析
- Phaser 编程技巧
- phaser 简单分享
- NOIP模拟(20171023)T3 拆网线
- day09File类
- iOS11(15A372)分享下载地址
- iOS多线程——你要知道的NSOperation都在这里
- C++中的强制类型转换
- phaser
- mysql存储过程repeat循环游标基本步骤
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- Ubuntu下cudnn安装
- Python startswith endswith
- UVA6642(树的点分治)
- hdu 1542(线段数+扫描线 求矩形并的面积)
- Qt 网络库各个类的信号
- iOS多线程——你要知道的RunLoop都在这里