当前位置: 首页 > 知识库问答 >
问题:

如何从 Java 8 的并行流中获益?

邰宇
2023-03-14

我在[如何在Java8中动态地进行过滤?]中问了一个关于使用Java8进行动态过滤的问题,Stuart Marks很好地回答了这个问题,并给出了一些示例代码来测试:https://gist.github.com/stuart-marks/10076102.

由于我是Java 8的新手,所以我想知道以下几行是否会使程序在需要处理大量数据的多核工作站上运行得更快,至少在理论上是这样:

//  widgetList.stream().filter(compositePredicate).forEach(System.out::println);
    widgetList.parallelStream().filter(compositePredicate).forEach(System.out::println);

//  compositeCriteria.apply(widgetList.stream()).forEach(System.out::println);
    compositeCriteria.apply(widgetList.parallelStream()).forEach(System.out::println);

将“widgetList.stream()”替换为“widgetList.parallelStream()”会加快进程吗?

共有1个答案

郏志诚
2023-03-14

最好的方法是测试它。但请注意:

  • 系统是我们一种同步方法,因此终端操作基本上是顺序的
  • 因此,只有滤波才能从并行化中受益
  • 对于相当大的列表或计算密集型过滤操作,并行流可能是一种收益
 类似资料:
  • 我有两个Coll对象流,我想在实例变量say的基础上找到公共对象。我需要使用Java8流来实现这一点。此外,我需要更新变量,比如说公共元素的乘数为1000。 } 我在写一些东西,比如: 我在这个方法上做错了!!我猜Java8不支持像equals那样带有参数的方法!! 我收到一个编译错误:

  • 它们之间有什么相同和不同之处,看起来Java并行流中有RXJava中可用的一些元素,是吗?

  • 问题内容: 它是纠正与Java 8,你需要执行下面的代码确实获得从平行流Collection? 从CollectionAPI: 默认Stream parallelStream() 返回一个可能与此流作为其源的并行Stream。此方法允许返回顺序流。 从BaseStreamAPI: S parallel() 返回并行的等效流。可能由于流已经是并行的,或者因为基础流的状态被修改为并行而返回自身。 我需

  • 在Java8中,您需要执行以下代码才能从中获得并行流,这是否正确? 来自API: 默认流parallelStream()

  • Java 8并行流在consuming子句中抛出异常时如何表现,例如在处理中?例如,以下代码: 它是否立即停止处理的元素?它是否等待已启动的元素完成?它是否等待所有的流完成?它是否在抛出异常后开始处理流元素? 什么时候回来?在异常之后立即?消费者处理完所有/部分元素后? 在并行流引发异常后,是否继续处理元素?(找到了发生这种情况的案例)。 这里有一般规则吗? 编辑(15-11-2016) 试图确定