Java 中的 Future 接口

10 Sept 2024 | 4 分钟阅读

Future 是 Java 语言中的一个接口,属于 java.util.concurrent 包。它象征着异步计算的输出。该接口提供了确定计算是否完成、等待计算完成以及获取计算结果的方法。一旦任务或计算完成,就无法撤销。

语法

Java Future 示例

ExecutorService 接口是 Java Future 的最佳体现。它会生成一个 Future 对象来跟踪一个或多个异步任务的进度(通过其某些方法)。

Future 接口的方法

该接口提供了以下五种方法

方法描述
cancel ()此方法尝试阻止任务完成。
get ()该过程在等待(如有必要)计算完成后获取其结果。
get ()如果需要,在检索结果之前等待计算完成的时间不超过指定时间。
isCancelled ()如果任务在完成之前被终止,此方法将返回 true。
isDone()如果任务已完成,此方法将返回 true。

Future 接口存在一些缺点,包括以下几点

  • 使用 Future 时,无法手动完成计算。
  • 一旦计算完成,它不会发出通知。
  • 无法创建和组合其链。

Java 8 提供了 **CompletableFuture** 来规避上述限制。

在异步编程中使用 Future

如前所述,Future 是异步任务的结果。这个 Java Future 接口提供了 get() 方法的以下两种迭代,它们都返回一个对象,用于获取异步任务的结果。返回值可能是一个泛型类型,请牢记这一点。例如

如果我们尝试在异步作业完成之前调用 get() 函数,它将等待直到结果准备就绪。

为了解决上述缺陷,Future 接口提供了 get() 函数的另一种迭代,该函数接受一个时间持续时间(以毫秒为单位)作为参数。这表示 Future 需要等待一段时间才能完成任务,然后才能提供结果。例如

如果在规定时间内未收到响应,Future 将抛出 TimeoutException。

取消异步任务

还可以使用 Future 接口的 cancel() 方法随时停止异步任务。例如

检查异步任务是否已取消

可以使用 Future 接口的 isCancelled() 方法来确定 Future 所代表的异步作业是否已被取消。如果任务成功取消,则返回 true;否则返回 false。例如

Java Future 示例

FutureExample.java

输出

The thread is still running task in progress ..
The thread is still running task in progress ..
The thread is still running task in progress ..
The thread is still running task in progress ..
The thread is still running task in progress ..
Thread is completed and the task has completed ..
My name is manoj kumar