Raf*_*ian 10 java parallel-processing java-stream
调用sequential()和parallel()更改Java 8流管道的执行方式是否放置?
例如,假设我有这样的代码:
new ArrayList().stream().parallel().filter(...).count();
Run Code Online (Sandbox Code Playgroud)
在这个例子中,很明显filter()将并行运行.但是,如果我有这个代码怎么办:
new ArrayList().stream().filter(...).parallel().count();
Run Code Online (Sandbox Code Playgroud)
是否filter()在并行运行仍然还是它按顺序运行?之所以不清楚是因为中间操作filter()是懒惰的,即它们不会在调用终端操作之前运行count().因此,在count()调用时,我们有一个并行流管道但是filter()顺序执行,因为它在调用之前到来了parallel()?
Hol*_*ger 10
注意结束了Stream的类的文档:
流管道可以顺序执行或并行执行.此执行模式是流的属性.通过初始选择的顺序或并行执行来创建流.(例如,Collection.stream()创建一个顺序流,Collection.parallelStream()创建一个并行流.)这种执行模式的选择可以通过BaseStream.sequential()或BaseStream.parallel()方法修改,并且可以使用BaseStream.isParallel()方法查询.
换句话说,在终端操作开始时调用sequential()或parallel()仅改变流的属性及其状态确定整个流水线的执行模式.
这可能没有明确记录在所有地方,因为,并非总是如此.在早期开发中,有些原型具有不同的阶段模式.2013年3月的这封邮件解释了这一变化.
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |