当前位置:首页 > Java

java如何实现promise

2026-03-22 12:10:12Java

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 的实现:

  1. 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:

java如何实现promise

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 的体验。

分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

java如何运行

java如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

如何学java

如何学java

学习Java的基础知识 Java是一门面向对象的编程语言,掌握基础语法是入门的关键。需要了解变量、数据类型、运算符、控制结构(如if-else、for循环、while循环)、数组等概念。可以通过官方文…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

java如何创建对象

java如何创建对象

创建对象的基本方法 在Java中,创建对象主要通过new关键字调用构造函数完成。基本语法为: ClassName objectName = new ClassName(); 例如创建String对象…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…