【发布时间】:2014-04-16 12:21:17
【问题描述】:
请参阅下面的简单示例,该示例计算列表中每个单词的出现次数:
Stream<String> words = Stream.of("a", "b", "a", "c");
Map<String, Integer> wordsCount = words.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
最后,wordsCount 是{a=2, b=1, c=1}。
但是我的流非常大,我想并行化这个工作,所以我写:
Map<String, Integer> wordsCount = words.parallel()
.collect(toMap(s -> s, s -> 1,
(i, j) -> i + j));
但是我注意到wordsCount 是一个简单的HashMap,所以我想知道是否需要明确要求并发映射以确保线程安全:
Map<String, Integer> wordsCount = words.parallel()
.collect(toConcurrentMap(s -> s, s -> 1,
(i, j) -> i + j));
非并发收集器可以安全地与并行流一起使用,还是应该在从并行流中收集时只使用并发版本?
【问题讨论】:
标签: java concurrency parallel-processing java-8 java-stream