并行流线程数获取

2022-08-17 20:13:54 浏览数 (2)

我那时喜欢的是黄昏、荒郊和忧伤,而如今则向往清晨、市区和宁静。——博尔赫斯

这里用一个Set去接收并行流产生的线程id,对于上方的reduce函数我之前一篇博客已经讲过了,今天就来论证一下,到底并行流的线程数是否和JVM虚拟机可用的处理器数一致:

代码如下:

代码语言:javascript复制
List<Integer> list = Stream.generate(() -> 1).limit(100).collect(Collectors.toList());
System.out.println(list);
int sum = list.parallelStream().reduce(1, Integer::sum, (a, b) -> {
    System.out.println(Thread.currentThread().getId()   " "   Thread.currentThread().getName()   " parallelStream执行sum时上次结果:["   a   "]本次值:["   b   "]");
    return Integer.sum(a, b);
});
Set<Long> threadIdSet = list.parallelStream().mapMultiToLong((i, c) -> c.accept(Thread.currentThread().getId())).collect(() -> Collections.synchronizedSet(new HashSet<>()), Set::add, Set::addAll);
System.out.println("结果:"   sum);
System.out.println("线程数:"   threadIdSet.size());
System.out.println("Java 虚拟机可用的处理器数:"   Runtime.getRuntime().availableProcessors());

运行结果如下:

0 人点赞