java基础教程_java多线程之FutureTask类使用教程
本章小编来介绍java基础教程(jdk5.0)中一种有用的同步工具类FutureTask,我们可以用FutureTask来实现某种比较耗时的计算,当调用get时如果任务计算完成就会立即返回结果,否则get将阻塞直到任务完成状态。就如下面的一个例子,通过FutureTask提前启动计算,可以来减少需要等待的时间.
package com.thred;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureTest {
public static void main(String[] args) {
Preloader preloader = new Preloader();
preloader.start();
List datas = null;
datas = preloader.getDatas();
for (String str : datas) {
System.out.println(str);
}
}
}
class Preloader {
private Callable callable = new Callable() {
@Override
public List call() throws Exception {
return downloadData();
}
};
private Thread thread;
private FutureTask future;
private List downloadData() {
List list = new ArrayList();
// 模拟下载数据
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 10; i++) {
list.add(“data” + i);
}
return list;
}
private void init() {
future = new FutureTask(callable);
thread = new Thread(future);
}
public Preloader() {
init();
}
public void start() {
thread.start();
}
public List getDatas() {
try {
return future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
}
通过上面的基于Java多线程基础教程中,我们可以知道FutureTask提供理想的那种耗时的计算,并可以开始早期的场景,例如,当我们开发Android应用程序,打开一个活动,你就可以开始与FutureTask提供继续获得更多耗时的资源,当你调用get方法,如果我们的计算未结束前将被阻塞,直到任务完成计算,如果计算已经完成将立即返回,使我们能够改善用户体验。更多相关java的知识内容可在线观看java视频教程的课程。