FutureTask类

FutureTask类是Future 的一个实现,并实现了Runnable。 因此可经过Executor(线程池)来运行,也可传递给Thread对象运行。

  假设在主线程中需要运行比較耗时的操做时。但又不想堵塞主线程时, 可以把这些做业交给Future对象在后台完毕。当主线程未来需要时。 就可以经过Future对象得到后台做业的计算结果或者运行状态。 
Executor框架利用FutureTask来完毕异步任务。并可以用来进行不论什么潜在的耗时的计算。
通常FutureTask多用于耗时的计算,主线程可以在完毕本身的任务后,再去获取结果。



/**
 * Created with IntelliJ IDEA.
 * User: 菜鸟大明
 * Date: 14-10-23
 * Time: 下午7:02
 * To change this template use File | Settings | File Templates.
 */
public class MyCallable1 implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println("call");
        return "end";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        MyCallable1 myCallable1 = new MyCallable1();

        FutureTask fk = new MyFutureTask(myCallable1);
        // 它可以经过Thread包装来直接运行,
//        Thread thread = new Thread(fk);
//        thread.start();
        // 也可以提交给ExecuteService来运行,
//        ExecutorService exec = Executors.newCachedThreadPool();
//        Future<String> future = exec.submit(myCallable1);
        // 并且还可以经过v get()返回运行结果,
        // 在线程体没有运行完毕的时候,主线程一直堵塞等待,运行完则直接返回结果。
        fk.run();
        System.out.println(fk.get());
    }
}

class MyFutureTask extends FutureTask {

    public MyFutureTask(Callable callable) {
        super(callable);
    }

    // 当线程运行结束,则运行done方法。

@Override public void done() { // 此处通常用来计算任务运行耗时解析。html

System.out.println("done"); } }java

相关文章
相关标签/搜索