返回原始方法的数据类型

Pat*_*ick 1 java

例如,我有一个返回布尔值的方法,并且我正在那里创建一个新线程,很难在该线程中返回布尔值。

让我告诉你这个例子的意思:

public boolean test() {
    int a = 5;
    int b = 3;

    new Thread(() -> {
        if (a > b) {
            return true; //NOT POSSIBLE
        } else {
            return false;
        }
    }).start();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个例子。这行不通,我需要执行以下操作:

private boolean value;

public boolean test() {
    int a = 5;
    int b = 3;

    new Thread(() -> {
        if (a > b) {
            value = true;
            return;
        } else {
            value = false;
            return;
        }
    }).start();

    return value;
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,有什么方法比蒂伊更容易?如果我在一个类中有更多类似的方法,这可能会变得混乱。

问候

小智 6

您想要的称为期货,请看一些示例 https://www.baeldung.com/java-future

或者对于Java 8和更高版本的CompletableFuture https://www.baeldung.com/java-completablefuture,该指南还提供了一个示例,该示例如何立即等待多个值。

基本上,您是在承诺提供值,并且接收者可以检查后台线程是否已经交付了值和/或等待完成。

您的示例可能如下所示:

public boolean test() throws Exception {
    int a = 5;
    int b = 3;

    CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(() -> {
        if (a > b) {
            return true;
        } else {
            return false;
        }
    });
    return future.get();
}
Run Code Online (Sandbox Code Playgroud)