gpt4 book ai didi

Java parallelStream 映射丢失记录

转载 作者:搜寻专家 更新时间:2023-11-01 01:48:57 29 4
gpt4 key购买 nike

我有以下代码,有时它的行为不确定。例如,我在那里传递了 3 个事件,而输出只有两个!你能解释一下这种行为的原因吗?

public List<AbstractTransactionResponse> getEventResponse(final List<AbstractEvent> events){

List<AbstractTransactionResponse> abstractTransactionResponses = new ArrayList<>();
events.parallelStream().map(event -> {
abstractTransactionResponses.add(getEventResponse(event));
return null;
}).collect(Collectors.toList());
return abstractTransactionResponses;
}

最佳答案

因为您并行添加到一个非线程安全的集合中,您可能会在输出列表中看到丢失的条目、null——真的不知道会发生什么。而是修复您的代码:

return events.parallelStream()
.map(this::getEventResponse)
.collect(Collectors.toList());

map 应该没有任何副作用,而您的 map 操作显然有,这是文档禁止的。另外请记住,parallel != faster 在大约 99% 的情况下,您需要对此进行衡量,但我怀疑您是否需要它。

关于Java parallelStream 映射丢失记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53847517/

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