MST

星途 面试题库

面试题:Java中并行流相比顺序流在执行效率上有哪些优势场景

请举例说明在Java Stream中,并行流相比于顺序流,在什么样的数据处理场景下能够显著提升执行效率,并简要阐述其原理。
46.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

数据处理场景举例

  1. 大数据量的计算密集型任务:例如对一个包含数百万个整数的集合进行复杂的数学运算,如计算每个数的平方根并累加到一个结果值中。假设集合为List<Integer> numbers = new ArrayList<>();,初始化填充大量数据。
    • 顺序流实现
double sumSequential = numbers.stream()
       .mapToDouble(Math::sqrt)
       .sum();
- **并行流实现**:
double sumParallel = numbers.parallelStream()
       .mapToDouble(Math::sqrt)
       .sum();

在这种大数据量且计算操作耗时的场景下,并行流能够显著提升效率。

  1. 数据元素间相互独立的过滤操作:比如有一个包含大量商品信息的列表,要筛选出价格大于某个阈值的商品。假设商品类为class Product { double price; // 其他属性省略 },列表为List<Product> products = new ArrayList<>();
    • 顺序流实现
List<Product> expensiveProductsSequential = products.stream()
       .filter(product -> product.price > threshold)
       .collect(Collectors.toList());
- **并行流实现**:
List<Product> expensiveProductsParallel = products.parallelStream()
       .filter(product -> product.price > threshold)
       .collect(Collectors.toList());

由于每个商品的价格判断相互独立,并行流可以并行处理不同元素,提高效率。

原理阐述

  1. 并行处理:并行流利用多核CPU的优势,将数据分成多个部分,每个部分在不同的线程中独立处理。例如上述大数据量计算密集型任务,数据集合被分割成多个子集合,每个子集合分配到不同线程,同时进行平方根计算和累加,从而减少整体执行时间。
  2. 减少等待时间:在数据元素相互独立的过滤操作中,并行流避免了顺序流中元素处理的串行等待。每个线程可以同时对自己负责的数据部分进行过滤,所有线程并行工作,大大缩短了完成整个过滤操作的时间。