java 如何实现promise
实现 Promise 的核心逻辑
Java 本身没有原生 Promise 类,但可以通过 CompletableFuture 或手动实现类似功能。以下是两种实现方式:
使用 CompletableFuture(推荐)
Java 8 引入的 CompletableFuture 提供了类似 Promise 的链式调用和异步处理能力:

CompletableFuture.supplyAsync(() -> {
// 模拟耗时操作
return "Result";
}).thenApply(result -> {
return result + " processed";
}).thenAccept(finalResult -> {
System.out.println("Final result: " + finalResult);
}).exceptionally(ex -> {
System.out.println("Error: " + ex.getMessage());
return null;
});
手动实现 Promise 模式 若需更接近 JavaScript Promise 的 API,可自定义类:

public class Promise<T> {
private T result;
private Throwable error;
private List<Consumer<T>> successCallbacks = new ArrayList<>();
private List<Consumer<Throwable>> failureCallbacks = new ArrayList<>();
public Promise(Supplier<T> task) {
new Thread(() -> {
try {
this.result = task.get();
successCallbacks.forEach(cb -> cb.accept(result));
} catch (Exception e) {
this.error = e;
failureCallbacks.forEach(cb -> cb.accept(error));
}
}).start();
}
public Promise<T> then(Consumer<T> callback) {
if (result != null) {
callback.accept(result);
} else {
successCallbacks.add(callback);
}
return this;
}
public Promise<T> catchError(Consumer<Throwable> callback) {
if (error != null) {
callback.accept(error);
} else {
failureCallbacks.add(callback);
}
return this;
}
}
关键特性对比
CompletableFuture 优势
- 原生支持线程池配置
- 提供
thenCombine/allOf等组合操作 - 内置异常处理机制
自定义 Promise 优势
- 更接近前端开发者的使用习惯
- 可自由扩展 API(如
finally方法)
异步执行示例
// 使用自定义 Promise
new Promise<String>(() -> {
Thread.sleep(1000);
return "Async Data";
}).then(data -> {
System.out.println("Received: " + data);
}).catchError(e -> {
System.err.println("Failed: " + e);
});
注意事项
- 手动实现需处理线程安全(如回调列表的并发修改)
CompletableFuture默认使用ForkJoinPool,大量任务时建议指定自定义线程池- 复杂场景可结合
CompletionStage接口实现更细粒度控制
两种方式都能实现核心的 Promise 模式,根据项目需求选择即可。现代 Java 项目通常优先使用 CompletableFuture。






