Java中的并行流

时间:2016-05-27 04:13:48

标签: java java-8 java-stream

如文档中所述,并行流允许我们并行执行管道。现在,请考虑以下简单示例:

List<Integer> lst;
//initialiaziation of lst
lst.parallelStream().mapToInt(Integer::intValue).max();

那么,这是否意味着管道并行执行?如果是这样,有多少线程将执行管道?我们只是创建一个并行流就是一种奇迹,就是这样......流框架将决定要创建多少线程来执行。

1 个答案:

答案 0 :(得分:1)

来自 OCP:Oracle认证专家Java SE 8程序员||学习指南:考试1z0-809

  

[...]取决于您环境中可用的CPU数量   以下是使用并行流的代码的可能输出   [...]更好的是,结果与处理器数量成比例。   缩放是我们添加更多资源(如CPU)时的属性   结果逐渐改善。 [...]

要对其进行测试,您可能需要使用peek并打印Thread.currentThread()

int i = list.parallelStream()
            .peek(x -> System.out.println(Thread.currentThread()))
            .mapToInt(Integer::intValue)
            .max().getAsInt();

对我来说,使用4个处理器,我就可以完成四个线程。