我有一个并行迭代(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”的Map。我的问题是它是线程安全的吗?我应该将它定义为'ConcurrentHashMap<>()'吗?
即使它是线程安全的,在性能方面,哪一个更好?
1条答案
按热度按时间2hh7jdfx1#
由于您在forEach消费者中为每个元素定义了一个新的map,因此它是完全线程安全的,因为唯一访问它的线程是当前处理流中元素的线程。
如果你在forEach消费者之外定义Map,通过多个线程访问它可能会导致一些问题。在这种情况下,使用ConcurrentHashMap或其他等效的线程安全实现。