一、简介
默认的异步任务有些难以控制,有时候我们希望在当前线程获取异步任务的结果。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 { FutureTaskfutureTask = 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()); }}