假设我有这个代码:
Collections.singletonList(10)
.parallelStream() // .stream() - nothing changes
.flatMap(x -> Stream.iterate(0, i -> i + 1)
.limit(x)
.parallel()
.peek(m -> {
System.out.println(Thread.currentThread().getName());
}))
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
输出是相同的线程名称,因此这里没有任何好处parallel- 我的意思是,有一个线程可以完成所有工作.
里面flatMap有这个代码:
result.sequential().forEach(downstream);
Run Code Online (Sandbox Code Playgroud)
我理解强制sequential属性如果"外部"流将是并行的(它们可能会阻塞),"外部"将不得不等待"flatMap"完成,反过来(因为使用相同的公共池)但为什么总是强迫吗?
这是那些在以后的版本中可能发生变化的事情之一吗?