java多线程Future和Callable用法
来源:互联网 发布:golang defer 函数 编辑:程序博客网 时间:2024/05/17 06:53
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());
}
}
}
- java多线程Future和Callable用法
- java多线程Callable和Future
- Java多线程--Callable和Future
- 多线程Callable和Future
- 多线程 :Callable和Future
- Java多线程之 Callable、Future和FutureTask
- Java 多线程线程池 - Callable和Future
- java多线程 callable和future学习
- Java多线程之Callable和Future
- Java多线程之Callable、Future和FutureTask
- java多线程之Callable和Future
- Java多线程:Callable、Future和FutureTask
- java多线程之Callable和Future
- Java多线程系列--Callable和Future
- Java多线程:Callable、Future和FutureTask
- java多线程获取结果 Callable和Future
- Java多线程(七):Callable和Future
- Java多线程之Callable、Future和FutureTask
- Java经验总结
- c语言的命令行参数
- 【Android UI设计与开发】第11期:ActionBar实现Tab选项卡和下拉导航列表
- java知识点部分函数区别
- callback of curl
- java多线程Future和Callable用法
- cocos2dx交叉编译之Android.mk修改
- 在O(n)时间内找到数组中任意第K小的数
- Image file was not found.
- 用单调栈解决最大连续矩形面积问题
- stm32之adc双通道的实现dma
- SQL中的EXISTS
- 【Android UI设计与开发】第12期:ActionBar实现层级导航的返回效果
- CVPR14与图像视频检索相关的论文