下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

java基础教程_java多线程之FutureTask类使用教程

作者:Comet     来源: www.kokojia.com点击数:1200发布时间: 2015-06-29 14:24:51

标签: java视频教程java基础教程java源代码

大神带你学编程,欢迎选课

本章小编来介绍java基础教程(jdk5.0)中一种有用的同步工具类FutureTask,我们可以用FutureTask来实现某种比较耗时的计算,当调用get时如果任务计算完成就会立即返回结果,否则get将阻塞直到任务完成状态。就如下面的一个例子,通过FutureTask提前启动计算,可以来减少需要等待的时间.
java基础教程_java多线程之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视频教程的课程。

赞(21)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程