zoukankan      html  css  js  c++  java
  • 三、阻塞等待异步结果FutureTask

    一、简介

    默认的异步任务有些难以控制,有时候我们希望在当前线程获取异步任务的结果。FutureTask可以帮助我们实现

    JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/FutureTask.html

    FutureTask实现了RunnableFuture接口,而RunnableFuture接口继承了Runnable和Future。

    同时,FutureTask接收一个Callable接口的实现类构造实例,在Runnable的run方法被执行的时候会去调用Callable的call方法,然后将处理结果set到输出对象里面去。

    Future的get方法,将获取该输出值,作为异步线程的返回结果。

    二、代码示例

    以下代码,我们创建了FutureTask实例,然后将它丢给一个线程去执行。

    再调用get方法阻塞等待异步结果,异步线程执行futureTask以后,返回结果。get方法获取结果以后,停止阻塞状态,打印结果。

    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    public class FutureTaskDemo {
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            FutureTask<String> futureTask = new FutureTask<>(() -> {
                System.out.println("future task is called");
                Thread.sleep(2000);
                return "futureTask is done";
            });
            new Thread(futureTask).start();
            System.out.println(futureTask.get());
        }
    }
  • 相关阅读:
    夜半饮酒
    邀你到成都来
    成都,我的天堂
    真不想松开你的手
    创业,你懂如何求人办事么?
    只要你愿意
    【五月的歌】重振山河
    成都,我爱你
    就算忘了自己也忘不了你
    假如
  • 原文地址:https://www.cnblogs.com/lay2017/p/10165515.html
Copyright © 2011-2022 走看看