java同步变异步框架_JAVA并行框架Fork/Join(二):同步和异步

packagecom.bird.concursey.charpet8;importjava.io.File;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ForkJoinPool;importjava.util.concurrent.RecursiveTask;public class FolderProcessor extends RecursiveTask>{private static final long serialVersionUID = 1L;privateString path;privateString extension;publicFolderProcessor(String path, String extension) {super();this.path =path;this.extension =extension;

}

@Overrideprotected Listcompute() {

List list = new ArrayList();

List tasks = new ArrayList();

File file= newFile(path);

File content[]=file.listFiles();if(content != null) {for(int i = 0; i < content.length; i++) {if(content[i].isDirectory()) {

FolderProcessor task= newFolderProcessor(content[i].getAbsolutePath(), extension);//异步方式提交任务

task.fork();

tasks.add(task);

}else{if(checkFile(content[i].getName())) {

list.add(content[i].getAbsolutePath());

}

}

}

}if(tasks.size() > 50) {

System.out.printf("%s: %d tasks ran.\n",file.getAbsolutePath(),tasks.size());

}

addResultsFromTasks(list,tasks);returnlist;

}/*** that will add to the list of files

the results returned by the subtasks launched by this task.

*@paramlist

*@paramtasks*/

private void addResultsFromTasks(Listlist,

Listtasks) {for(FolderProcessor item: tasks) {

list.addAll(item.join());

}

}/*** This method compares if the name of a file

passed as a parameter ends with the extension you are looking for

*@paramname

*@return

*/

private booleancheckFile(String name) {returnname.endsWith(extension);

}public static voidmain(String[] args) {

ForkJoinPool pool= newForkJoinPool();

FolderProcessor system= new FolderProcessor("C:\\Windows", "log");

FolderProcessor apps= new FolderProcessor("C:\\Program Files", "log");

pool.execute(system);

pool.execute(apps);

pool.shutdown();

List results = null;

results=system.join();

System.out.printf("System: %d files found.\n",results.size());

results=apps.join();

System.out.printf("Apps: %d files found.\n",results.size());

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值