Java 9 CompletableFuture 增强:超时控制、子类化支持与工厂方法
核心增强点
- 延迟与超时支持:解决 Future 无限等待问题。
- 改进子类化支持:允许自定义 CompletableFuture 子类保持类型一致性。
- 新增工厂方法:简化已完成/异常完成阶段创建。
1. 超时与延迟补全
// 在指定时间内未完成则以 value 正常完成
public CompletableFuture completeOnTimeout(T value, long timeout, TimeUnit unit)
// 在指定时间内未完成则以 TimeoutException 异常完成
public CompletableFuture orTimeout(long timeout, TimeUnit unit)
使用示例
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
Thread.sleep(2000); // 模拟耗时操作
return "Result";
});
// 1秒后超时,返回默认值
String result = future.completeOnTimeout("Fallback", 1, TimeUnit.SECONDS)
.join(); // "Fallback"
// 或抛出异常
future.orTimeout(1, TimeUnit.SECONDS)
.exceptionally(ex -> "Timeout: " + ex.getMessage());
2. 子类化支持改进
// 返回异步方法使用的默认 Executor,子类可覆盖提供自定义线程池
public Executor defaultExecutor()
// 返回新的未完成 CompletableFuture 实例,子类必须覆盖返回自类型实例
public CompletableFuture newIncompleteFuture()
子类化示例
public class MyFuture extends CompletableFuture {
private final Executor myExecutor = Executors.newFixedThreadPool(4);
@Override
public Executor defaultExecutor() {
return myExecutor;
}
@Override
public CompletableFuture newIncompleteFuture() {
return new MyFuture<>(); // 保持子类型
}
}
// 使用
MyFuture f = new MyFuture<>();
f.completeAsync(() -> "Hello").thenAccept(System.out::println);
3. 新增静态工厂方法
// 已完成的 CompletableFuture
public static CompletableFuture completedFuture(U value)
// 已完成的 CompletionStage(仅接口方法)
public static CompletionStage completedStage(U value)
// 异常完成的 CompletionStage
public static CompletionStage failedStage(Throwable ex)
工厂方法示例
// 快速创建已完成阶段,用于测试或预计算结果
CompletionStage stage = CompletableFuture.completedStage("cached");
stage.thenAccept(System.out::println); // 立即执行
// 异常阶段用于错误路径模拟
CompletionStage failed = CompletableFuture.failedStage(
new IllegalStateException("Service down"));
failed.exceptionally(ex -> -1); // 降级处理
对比 Java 8
| 能力 | Java 8 | Java 9+ |
|---|---|---|
| 超时控制 | 需外部轮询或 get(timeout) 阻塞 | orTimeout/completeOnTimeout 非阻塞链式 |
| 子类类型保持 | 异步方法返回基类 CompletableFuture | 覆盖 newIncompleteFuture 保持子类型 |
| 预完成阶段 | CompletableFuture.completedFuture 仅返回 CF | 新增 completedStage/failedStage 返回接口类型 |
java
- 提升设备可靠性蓝图:结构化5步实施计划
- 阿勒格尼电力投资1.56亿美元升级西弗吉尼亚州电网可靠性
- 借助强大 API 扩展 CMMS 功能
- 树莓派构建稳健传感器 API:基于 GY‑91 多功能模块的 Flask 实现
- 六大关键创新推动加密硬件性能飞跃
- Java 9 (JDK 9) 核心特性与优势全览
- Java 9 进程 API 改进:ProcessHandle 与异步控制
- Java 9 Stream API 增强:takeWhile、dropWhile、iterate 与 ofNullable
- Java 9 Optional 增强:stream()、ifPresentOrElse() 与 or()
- Java 9 多Resolution图像API:响应式图形处理
- Java 9 CompletableFuture 增强:超时控制、子类化支持与工厂方法
- Java 8 全新日期时间 API:线程安全、设计优雅、时区处理轻松搞定