gpt4 book ai didi

在某些情况下,Java 断言不会触发 futures

转载 作者:行者123 更新时间:2023-11-30 10:08:18 27 4
gpt4 key购买 nike

在 futures 中使用时,我似乎无法触发 java 断言。

如下例所示,我创建了一个包含单个任务的列表,然后我使用 .invokeAll 执行该任务。它输出字符串,但即使使用 -ea 运行,断言也不会触发。但是,如果我将 ex.invokeAll(test)ex.invokeAll(test).get(0).get()

交换,它确实会触发
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;

public class test {

public static void main(String[] args) throws InterruptedException, ExecutionException {
var ex = Executors.newWorkStealingPool();
List<Callable<Void>> test = new ArrayList<>();
test.add(() -> {
System.out.println("I run");
assert false;
return null;
});
ex.invokeAll(test);
}
}

我正在使用 java 11.0.1 从命令行运行它

最佳答案

我之前的回答不正确。

看到的行为(如果我将 ex.invokeAll(test) 与 ex.invokeAll(test).get(0).get() 交换)是预期的。 Future 是异步操作结果的表示,但您实际上需要首先使用 get() 访问该结果。根据 Future ( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html#get()) 的文档,如果您尝试获取执行结果并且执行抛出异常,则将抛出 ExecutionException 以表示将来出现问题.在您调用 get() 之前,您不会得到任何东西。

关于在某些情况下,Java 断言不会触发 futures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com