用Callable和Future实现多线程文件搜索
来源:互联网 发布:网络上刷信誉是真的吗 编辑:程序博客网 时间:2024/05/16 13:04
package com.test.io;import java.io.File;import java.io.FilenameFilter;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;public class FileSearch implements Callable<List<File>> {private File directory;private FilenameFilter filter;public FileSearch(File directory, FilenameFilter filter) {super();this.directory = directory;this.filter = filter;}public static void main(String[] args) throws Exception {File dir = new File("E:\\workspace\\Test");FileSearch search = new FileSearch(dir, new FilenameFilter() {public boolean accept(File dir, String name) {return name.endsWith(".java");}});FutureTask<List<File>> task = new FutureTask<List<File>>(search);Thread t = new Thread(task);t.start();for (File f : task.get()) {System.out.println(f.getPath());}}public List<File> call() throws Exception {List<File> list = new ArrayList<File>();File[] files = directory.listFiles();ArrayList<Future<List<File>>> results = new ArrayList<Future<List<File>>>();for (File f : files) {if (f.isDirectory()) {Callable<List<File>> runnable = new FileSearch(f, filter);FutureTask<List<File>> task = new FutureTask<List<File>>(runnable);results.add(task);Thread t = new Thread(task);t.start();} else if (filter.accept(f.getParentFile(), f.getName())) {list.add(f);}}for (Future<List<File>> result : results) {list.addAll(result.get());}return list;}}
改进:这个程序产生了大量生命周期很短的线程,每个目录产生一个线程,可以使用一个线程池来运行任务。
- 用Callable和Future实现多线程文件搜索
- 多线程Callable和Future
- 多线程 :Callable和Future
- java多线程Callable和Future
- 关于多线程Callable和Future
- Java多线程--Callable和Future
- Java多线程之Callable和Future接口的实现
- 多线程Future+Callable实现并发查询
- Java多线程之 Callable、Future和FutureTask
- java多线程Future和Callable用法
- Java 多线程线程池 - Callable和Future
- java多线程 callable和future学习
- Java多线程之Callable和Future
- Java多线程之Callable、Future和FutureTask
- java多线程之Callable和Future
- 多线程编程入门(11):Callable和Future
- Java多线程:Callable、Future和FutureTask
- 多线程(九)Callable、Future和FutureTask
- JAVA深复制(深克隆)与浅复制(浅克隆)
- 二叉树遍历之morris traversal
- (转)Android软件开发之发送短信与系统短信库解析(三十)
- Java乔晓松-spring中集合的装配
- 小额贷款覆盖深圳约25万余家小微企业
- 用Callable和Future实现多线程文件搜索
- csdn测试
- WebStorm debug JS示例
- hdu2686 费用流
- 全排列(1) ----字典序
- strdup的原理以及用法
- 视频: Linux最佳入门教程一
- 软件层的特征
- 数据库插入数据(包括Identity列)