开启掘金成长之旅!这是我参与「掘金日新计划 · 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 方法来说,顾名思义,它就是用来获取返回结果的。但是有以下几种情况,我们需要弄清楚。
- 如果任务完成执行,调用接口的时候,就会直接返回执行的结果。
- 在调用这个方法的时候,如果任务还没有完成执行,那么调用方法的线程就会被阻塞。
- 如果执行的任务抛出了异常,那么在调用get 方法的时候,也会抛出ExecutionException 异常。
- 当取消了任务的时候,调用方法则会抛出CancellationException 异常。
- 在使用get 方法的时候如果带了时间参数,那么在规定时间返回结果则执行是正常的;如果在规定的时间内没有执行完成,没有返回结果,那么就会抛出TimeoutException 异常。
isDone方法
对于isDone 方法来说,它的功能就比较单一了,同时其作用也比较明显,就是用来判断任务是否执行完成的。
如果任务执行完成,不论执行成功还是失败,都会返回true;反之,如果任务没有执行完成,那么就会返回false。
cancel 方法
cancel 方法有个boolean 的参数,通过这个参数我们可以控制是否取消正在执行中的任务。我们对cancel 方法可能会遇到的情况做逐一说明。
- 如果任务还没有执行,调用方法,那么返回true,这个方法是被正常取消的。
- 如果任务已经被执行并且执行结已经结束,那么取消就是失败的,返回false。
- 如果任务正在执行中,对于方法中的参数,在传入true 的时候,则代表需要中断正在执行的任务;如果传入false,那么代表不需要中断正在执行的任务。
isCancelled方法
这个方法的唯一的作用就是用来判断任务是否被取消。
总结
这篇文章介绍了Future 接口定义以及接口中方法的定义,着重说明了各个接口的使用场景及功能。