java如何实现promise
Java 实现 Promise 的方法
在 Java 中,虽然没有原生支持 JavaScript 中的 Promise,但可以通过以下方式实现类似功能:
使用 CompletableFuture(Java 8+)
CompletableFuture 是 Java 8 引入的异步编程工具,功能与 Promise 类似:
CompletableFuture<String> promise = CompletableFuture.supplyAsync(() -> {
// 异步任务
return "Result";
});
promise.thenApply(result -> {
// 处理结果
System.out.println(result);
return result + " processed";
}).thenAccept(finalResult -> {
// 最终处理
System.out.println(finalResult);
});
手动实现 Promise 模式
可以创建一个简单的 Promise 类:
import java.util.concurrent.*;
import java.util.function.*;
public class Promise<T> {
private T result;
private Exception error;
private boolean isCompleted;
private Consumer<T> successCallback;
private Consumer<Exception> failureCallback;
public void complete(T result) {
this.result = result;
this.isCompleted = true;
if (successCallback != null) {
successCallback.accept(result);
}
}
public void fail(Exception error) {
this.error = error;
this.isCompleted = true;
if (failureCallback != null) {
failureCallback.accept(error);
}
}
public Promise<T> then(Consumer<T> callback) {
if (isCompleted && error == null) {
callback.accept(result);
} else {
this.successCallback = callback;
}
return this;
}
public Promise<T> error(Consumer<Exception> callback) {
if (isCompleted && error != null) {
callback.accept(error);
} else {
this.failureCallback = callback;
}
return this;
}
}
使用第三方库
一些第三方库提供了更接近 JavaScript Promise 的实现:
- Guava 的 ListenableFuture:
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10)); ListenableFuture<String> future = service.submit(() -> "Result");
Futures.addCallback(future, new FutureCallback() { public void onSuccess(String result) { System.out.println(result); } public void onFailure(Throwable t) { t.printStackTrace(); } }, service);
2. RxJava:
```java
Single<String> promise = Single.fromCallable(() -> "Result");
promise.subscribe(
result -> System.out.println(result),
error -> error.printStackTrace()
);
异步执行与回调
对于简单的异步操作,可以使用 ExecutorService:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
Thread.sleep(1000);
return "Async result";
});
try {
String result = future.get(); // 阻塞获取结果
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
选择哪种方法取决于具体需求。CompletableFuture 是 Java 原生支持且功能强大的选择,而手动实现或第三方库可以提供更接近 JavaScript Promise 的体验。






