哈希图具有两个键和值对,它们不会由不同的线程并行处理。
import java.util.stream.Stream;
import java.util.Map;
import java.util.HashMap;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.values().parallelStream()
.peek(x -> System.out.println("processing "+x+" in "+Thread.currentThread()))
.forEach(System.out::println);
}
}
输出:
processing 1 in Thread[main,5,main]
1
processing 2 in Thread[main,5,main]
2
网址:https://ideone.com/Hkxkoz
ValueSpliterator应该尝试将HashMap数组拆分为大小为1的插槽,这意味着应在不同的线程中处理两个元素。
来源:https : //www.codota.com/code/java/methods/java8.util.HMSpliterators $ ValueSpliterator /%3Cinit%3E
将它们包装后ArrayList,它会按预期工作。
new ArrayList(map.values()).parallelStream()
.peek(x -> System.out.println("processing "+x+" in "+Thread.currentThread()))
.forEach(System.out::println);
输出:
processing 1 in Thread[ForkJoinPool.commonPool-worker-3,5,main]
1
processing 2 in Thread[main,5,main]
2
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。