- 方法中若多次转并行转串行,最后一个设置胜出。如以下代码的流会全并行执行: stream.parallel().filter(...).sequential().map(...).parallel().reduce();
- 并行流内部使用ForkJoinPool,默认的线程数为处理器的核心数:Runtime.getRuntime().availableProcessors()。
- 可以更改默认线程数,方法:System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelise","12")。注意这是全局的属性,会影响所有并行流。一般情况下不建议修改。
- 特别注意自动装箱和拆箱带来的损耗,这几个流没有装箱拆箱操作:IntStream, LongStream, DoubleStream。
- 小数据量时基本没必要使用并行流。
- 注意数据来源的可并行可分解性。较好的:ArrayList,IntStream.range;一般的:HashSet,TreeSet; 差的:LinkedList, Stream.iterate。