在并行流Java中定义Map

dohp0rv5  于 7个月前  发布在  Java
关注(0)|答案(1)|浏览(53)

我有一个并行迭代(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<>()'吗?
即使它是线程安全的,在性能方面,哪一个更好?

2hh7jdfx

2hh7jdfx1#

由于您在forEach消费者中为每个元素定义了一个新的map,因此它是完全线程安全的,因为唯一访问它的线程是当前处理流中元素的线程。
如果你在forEach消费者之外定义Map,通过多个线程访问它可能会导致一些问题。在这种情况下,使用ConcurrentHashMap或其他等效的线程安全实现。

相关问题