返回原始方法的数据类型

时间:2019-04-14 15:18:14

标签: java

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

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

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

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

这只是一个例子。这行不通,我需要做这样的事情:

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;
}

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

致谢

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

启动新线程时,当前方法可能会在新线程之前完成(return value)。

捕获结果的一种方法是从新线程中调用侦听器实例的某种方法(通常是ActionListener的actionPerformed),您应该在调用test()方法时将其作为参数传递。

启动新线程的基本思想是在主程序执行更紧迫的操作的同时,花一些时间来传递冗长的方法。