Java 中Future 接口的介绍

122 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

这篇文章我们来介绍一下Future 的具体使用方法。

接口定义

首先我们来看一下Future 的接口定义:

public interface Future<V> {
    boolean cancel(boolean mayInterruptIfRunning);
    boolean isCancelled();
    boolean isDone();
    V get() throws InterruptedException, ExecutionException;
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutExceptio
}

对应Future 接口,以下几个方法需要重点说明一下:

get 方法

对于get 方法来说,顾名思义,它就是用来获取返回结果的。但是有以下几种情况,我们需要弄清楚。

  1. 如果任务完成执行,调用接口的时候,就会直接返回执行的结果。
  2. 在调用这个方法的时候,如果任务还没有完成执行,那么调用方法的线程就会被阻塞。
  3. 如果执行的任务抛出了异常,那么在调用get 方法的时候,也会抛出ExecutionException 异常。
  4. 当取消了任务的时候,调用方法则会抛出CancellationException 异常。
  5. 在使用get 方法的时候如果带了时间参数,那么在规定时间返回结果则执行是正常的;如果在规定的时间内没有执行完成,没有返回结果,那么就会抛出TimeoutException 异常。

isDone方法

对于isDone 方法来说,它的功能就比较单一了,同时其作用也比较明显,就是用来判断任务是否执行完成的。

如果任务执行完成,不论执行成功还是失败,都会返回true;反之,如果任务没有执行完成,那么就会返回false。

cancel 方法

cancel 方法有个boolean 的参数,通过这个参数我们可以控制是否取消正在执行中的任务。我们对cancel 方法可能会遇到的情况做逐一说明。

  1. 如果任务还没有执行,调用方法,那么返回true,这个方法是被正常取消的。
  2. 如果任务已经被执行并且执行结已经结束,那么取消就是失败的,返回false。
  3. 如果任务正在执行中,对于方法中的参数,在传入true 的时候,则代表需要中断正在执行的任务;如果传入false,那么代表不需要中断正在执行的任务。

isCancelled方法

这个方法的唯一的作用就是用来判断任务是否被取消。

总结

这篇文章介绍了Future 接口定义以及接口中方法的定义,着重说明了各个接口的使用场景及功能。