上篇文章:java多线程解说【拾贰】_并发框架:Fork/Join
上篇文章我们介绍了并发框架中Fork/Join框架,本文继续介绍下Future框架。
Future框架
Future框架的核心是可以异步地执行一个任务,让主线程可以先去处理其他业务逻辑,而充分利用计算机资源。主要包括FutureTask类,它实现了Future接口和Runnable接口,也就是说它既可以自己运行,又可以交给Executor执行。
一个例子
public class TestFuture implements Callable<String>{
private String filePath;
public TestFuture(String filePath){
this.filePath = filePath;
}
@Override
public String call() throws Exception {
int fileSum = 0;
int folderSum = 0;
File file = new File(filePath);
File[] list = file.listFiles();
for (File f : list) {
if (f.isDirectory()) {
folderSum++;
} else{
fileSum++;
}
}
return "文件夹数:"+folderSum+",文件数:"+fileSum;
}
public static void main(String[] args) {
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<String> future = threadPool.submit(new TestFuture("D:/my workspaces"));
try {
Thread.sleep(5000); //可以做一些事情
if(future.isDone()){
System.out.println(future.get());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
上面的例子是通过声明一个单线程的线程池执行FutureTask的,关于线程池的概念,我们在下文中将详细介绍: