提问人:Ragin P M 提问时间:11/15/2023 更新时间:11/15/2023 访问量:53
在并行流 Java 中定义映射 [已关闭]
Defining a Map inside a Parallel Stream Java [closed]
问:
我有一个并行迭代(Java):
public void getAllPossibleRoute(ImmutableMap<String, ImmutableMap<String,ImmutableList<Object>>> myImmutableMap) {
ImmutableList<String> demandLocationCodes = getDemandLocationCodes(demandList);
demandLocationCodes.parallelStream().forEach(demandLocationCode -> {
MutableMap<String,Double> costMap = new UnifiedMap();
});
}
在并行迭代中,我定义了一个名为“costMap”的地图。我的问题是线程安全吗?我应该将其定义为“ConcurrentHashMap<>()”吗?
即使它是线程安全的,在性能方面,哪一个更好?
答:
0赞
0x150
11/15/2023
#1
由于您正在为 forEach 使用者中的每个元素定义一个新映射,因此它是完全线程安全的,因为访问它的唯一线程是当前处理流中元素的线程。
如果要在 forEach 使用者之外定义映射,则通过多个线程访问它可能会导致一些问题。在这种情况下,请使用 ConcurrentHashMap 或其他等效的线程安全实现。
评论