java多线程Future和Callable用法
2014-04-06 19:25
417 查看
Java多线程搜索文件的代码示例,主要是使用Callable和Future,生成大量生命周期很短的线程,每个目录产生一个线程,可以使用一个线程池来运行任务,多个线程同时搜索文件,然后自动结束线程
package com.huawei.concurrent.thread;
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
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;
}
@Override
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 file : files)
{
if(file.isDirectory())
{
System.out.println("1111111111111:"+file.getParentFile()+"1111111111111111111111:"+file.getPath());
Callable<List<File>> runnable = new FileSearch(file,filter);
FutureTask<List<File>> task = new FutureTask<List<File>>(runnable);
results.add(task);
Thread t = new Thread(task);
t.start();
}
else if (filter.accept(file.getParentFile(), file.getName()))
{
System.out.println("父目录路径:"+file.getParentFile()+"包子:"+file.getPath());
list.add(file);
}
}
for (Future<List<File>> result : results) {
list.addAll(result.get());
}
return list;
}
public static void main(String[] args) throws Exception
{
File dir = new File("d:"+File.separator+"work"+File.separator+"test");
FileSearch search = new FileSearch(dir,new FilenameFilter()
{
@Override
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());
System.out.println(f.getName());
}
}
}
package com.huawei.concurrent.thread;
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
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;
}
@Override
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 file : files)
{
if(file.isDirectory())
{
System.out.println("1111111111111:"+file.getParentFile()+"1111111111111111111111:"+file.getPath());
Callable<List<File>> runnable = new FileSearch(file,filter);
FutureTask<List<File>> task = new FutureTask<List<File>>(runnable);
results.add(task);
Thread t = new Thread(task);
t.start();
}
else if (filter.accept(file.getParentFile(), file.getName()))
{
System.out.println("父目录路径:"+file.getParentFile()+"包子:"+file.getPath());
list.add(file);
}
}
for (Future<List<File>> result : results) {
list.addAll(result.get());
}
return list;
}
public static void main(String[] args) throws Exception
{
File dir = new File("d:"+File.separator+"work"+File.separator+"test");
FileSearch search = new FileSearch(dir,new FilenameFilter()
{
@Override
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());
System.out.println(f.getName());
}
}
}
相关文章推荐
- Java线程和多线程(十三)——Callable,Future,FutureTask
- Java多线程 - Callable和Future
- (五) Java多线程详解之Callable和Future阻塞线程同步返回结果
- java多线程总结笔记3——Callable和Future
- Java多线程系列--“JUC线程池”06之 Callable和Future
- java多线程Runnable、Callable、Executor、Future、FutureTask关系解读
- Java多线程之Callable和Future
- Java编写多线程, Callable,Runnable比较及用法
- java 多线程(一)---创建线程的三种方式Thread,Runnable,Callable与Future
- Java多线程与并发库高级应用-Callable与Future的应用
- Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable
- Java多线程3-线程池、Callable和Future
- Java多线程编程:Callable、Future和FutureTask浅析(多线程编程之四)
- Java多线程:Callable、ExecutorService、CountDownLatch、Future和FutureTask
- java 多线程 executor callable runnable future
- Java - 多线程Callable、Executors、Future
- java多线程之Callable Future / JS获取样式
- Java多线程编程:Callable、Future和FutureTask浅析
- Java多线程3-线程池、Callable和Future
- Java多线程--Future与Callable