Java Future 示例2025年3月17日 | 阅读 14 分钟 在 Java 中,Future 是一个属于 java.util.concurrent 包的 接口。它用于表示异步计算的结果。该接口提供了检查计算是否完成、等待其完成以及检索计算结果的方法。一旦任务或计算完成,就无法取消该计算。 语法 Java Future 示例Java Future 的最佳示例是 ExecutorService 接口。它会从其某些方法生成 Future (来自其某些方法) 对象,用于跟踪一个或多个异步任务的进度。 Future 接口的方法该接口提供了以下五种方法
Future 接口存在一些不足之处,如下所示:
为了克服上述限制,Java 8 引入了 CompletableFuture。 在异步编程中使用 Future获取结果正如我们上面所讨论的,Future 表示异步任务的结果。为了检索该异步任务的结果,Java Future 接口提供了以下两个 get() 方法版本,它们都返回一个对象。请注意,返回类型可能是一个泛型类型。例如: 注意:如果我们尝试在异步任务完成之前调用 get() 方法,get() 方法将阻塞直到结果准备就绪。为了克服上述缺点,Future 接口提供了另一个 get() 方法版本,该版本接受一个 **时间**(以毫秒为单位)作为参数。它表示 Future 将等待一段时间来完成任务,之后结果将在 Future 中可用。例如: 如果在指定时间内 Future 没有获得任何结果,Future 将抛出 **TimeoutException**。 取消异步任务我们还可以通过调用 Future 接口的 cancel() 方法随时取消异步任务。例如: 检查异步任务是否完成该接口提供了一个 isDone() 方法来检查异步任务是否完成。例如: 检查异步任务是否已取消Future 接口提供了一个 isCancelled() 方法来检查由 Future 表示的异步任务是否已取消。如果任务成功取消,则返回 true,否则返回 false。例如: Java Future 示例FutureExample.java 输出 ![]() 将 Future 与 ExecutorService 一起使用文件名:FutureWithExecutorServiceExample.java 输出 Task submitted. Task completed with result: 8 取消 Future 任务文件名:FutureTaskCancellationExample.java 输出 Task submitted. Running... 1 Running... 2 Running... 3 Attempting to cancel the task... Task was successfully cancelled. 使用 Future 处理异常文件名:FutureExceptionHandlingExample.java 输出 Task submitted. Task failed with exception: java.lang.Exception: An error occurred during task execution. 等待多个 Future文件名:WaitingForMultipleFuturesExample.java 输出 All tasks submitted. Task 3 will sleep for 2 seconds. Task 2 will sleep for 2 seconds. Task 1 will sleep for 3 seconds. Task 4 will sleep for 3 seconds. Task 5 will sleep for 2 seconds. Task completed with result: 10 Task completed with result: 20 Task completed with result: 30 Task completed with result: 40 Task completed with result: 50 链式调用 Future文件名:ChainingFuturesExample.java 输出 Task 1: Start Task 1: End Task 2: Start with result from Task 1: 10 Task 2: End Task 3: Start with result from Task 2: 20 Task 3: End All tasks completed successfully. 处理超时文件名:CompletableFutureTimeoutExample.java 输出 Task: Start Task timed out, could not get result. Task: End 等待 Future 完成文件名:WaitForFutureExample.java 输出 Task submitted to executor. Task completed with result: 42 处理回调中的异常文件名:HandlingException.java 输出 Exception: java.lang.RuntimeException: Something went wrong Default value 合并 Future文件名:CombineFuturesExample.java 输出 Task 1: Start Task 2: Start Task 1: End Task 2: End Combining results: 10 + 20 Combined result: 30 Future 接口的局限性Java 中的 Future 接口以其管理异步操作的能力而闻名,但也存在一些值得注意的限制,这些限制会影响我们在 Java 应用程序中处理并发的方式。
这些限制强调了在使用 Future 接口设计并发 Java 应用程序时需要仔细考虑,并强调了简洁性和功能性之间的权衡。 下一主题Java 中的最小成本路径问题 |
Java Scanner 类提供了 Int() 方法来读取整数值,Double() 方法来读取双精度值,Long() 方法来读取长整数值,等等。但是 Scanner 类中没有 Char() 方法来读取 Java 中的字符。在本节中,我们……
阅读 2 分钟
? Java 是一种解释型语言,与 OOP(面向对象编程)有着紧密的联系。该语言不被归类为纯粹的面向对象编程语言。但是,要理解这一前提,必须研究面向对象语言的本质及其...
5 分钟阅读
在本节中,我们将学习什么是友好数,并创建 Java 程序来检查给定数是否为友好数。友好数程序经常在 Java 编码测试和学术界中出现。友好数 友好数是两个不同的...
阅读 4 分钟
雨伞问题是一个经典的 Java 编程问题,用于测试程序员的技能。该问题涉及编写一个程序来确定一个人在季风季节保持干燥需要购买的雨伞数量。问题陈述:这是一个...
5 分钟阅读
在 Java 中,方法是一组执行特定任务或操作的语句。它被广泛使用,因为它提供了代码的重用性,意味着编写一次即可多次使用。它还便于修改。每个方法都有自己的名称...
阅读 4 分钟
在 Java Web 开发中,“Handler dispatch failed”错误是在使用 Spring MVC 等 Web 框架时遇到的常见问题。当应用程序的请求处理过程中出现无限循环或递归时,通常会发生此错误,从而导致 java.lang.StackOverflowError。在...
阅读 3 分钟
A 是一个访问修饰符。它可以分配给变量、方法、构造函数和类。它是最不受限制的访问修饰符类型。要点:公共访问修饰符在任何地方都可访问。因此,我们可以轻松地在类内部和外部访问公共...
阅读 3 分钟
在 Java 中,当组织包含重复元素的集合以及借助 Multiset 统计元素频率时。Java SE 在其标准库中不支持 Multiset 作为接口,但它可以由第三方框架(如 Google...)支持。
5 分钟阅读
重叠区间问题是应用到调度应用程序中的一个重要的计算挑战,同时也应用于计算几何和范围合并任务。给定一个区间范围,目标是快速处理它们以进行合并区间检测。两个区间 [a,... (省略了其他部分)
5 分钟阅读
费马小定理是数学概念的重要贡献,在算术和计算机科学中得到广泛应用。它尤其在离散算术、密码学和基本验证中成立。该定理以法国数学家皮埃尔·德·费马的名字命名,其陈述了一个关键属性……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India