相关疑难解决方法(0)

并行flatMap总是顺序的

假设我有这个代码:

 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"完成,反过来(因为使用相同的公共池)但为什么总是强迫吗?

这是那些在以后的版本中可能发生变化的事情之一吗?

java java-8 java-stream java-9

9
推荐指数
1
解决办法
1683
查看次数

标签 统计

java ×1

java-8 ×1

java-9 ×1

java-stream ×1