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

    作者:Comet更新于: 2015-06-29 14:24:51

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

    本章小编来介绍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视频教程的课程。

课课家教育

未登录