博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八、阻塞等待异步结果FutureTask
阅读量:6711 次
发布时间:2019-06-25

本文共 936 字,大约阅读时间需要 3 分钟。

一、简介

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

JDK文档:

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
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

你可能感兴趣的文章