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());
        }
    }
  • 相关阅读:
    Kera高层API002
    Kera高层API
    手写数字问题实战(层)
    函数优化实战
    反向传播算法
    链式法则
    多输出感知机及其梯度
    JDBC
    mysql查询操作1
    内部类
  • 原文地址:https://www.cnblogs.com/lay2017/p/10165515.html
Copyright © 2011-2022 走看看