Java并行流示例

时间:2020-02-23 14:37:13  来源:igfitidea点击:

streamapi允许开发人员借鉴多核体系结构,通过创建并行流并使程序更快地执行操作来提高Java程序的性能。

创建并行流有两种方法:

通过使用parallelStream()方法

通过使用parallel()方法

当你使用并行流时,它们有效地使用了更多的CPU功率,这使得整个输出或者处理(如果你愿意的话)总体上更快。快得多!另外,如果我们不使用并行流进行大型计算,那么程序将只使用16个内核中的1个内核。多么低效!

订单

并行流将问题划分为多个子集(或者子问题),它们同时解决这些子集(与顺序顺序不同,它们逐个执行每个小问题)。在子问题被计算出来之后,它们的所有解被合并。

如何实施

Java允许我们通过使用诸如map之类的聚合操作来实现并行流。

import java.util.ArrayList;
import java.util.List;

public class Main {

  public static int compute(int n) {
      for (int i = 0; i < 10000; i++) {
          n = n + i;
      }
      return n;
  }

  public static void main(String[] args) {
      ArrayList<Integer> arrayList = new ArrayList<>();
      for (int i = 0; i < 1000000; i++) {
          arrayList.add(i*6);
      }

      System.out.println("Added all the numbers to the arraylist.");

      System.out.println("Starting to add numbers...");

      int result = arrayList.parallelStream().map(i -> compute(i)).reduce(Integer::sum).get();

      System.out.println(reuslt);
  }
}

在这个示例中,我们有一个示例方法,它只循环10000次,并将i添加到n中。最后,我们只返回n。在main函数中,我们创建了一个包含整数的ArrayList。然后我们创建一个巨大的循环,循环1000000次,我们在arraylist中增加i*6. 在我们添加它之后,我们有两个print语句,它们指出这个大循环已经结束。

下面这些打印声明,是有趣的部分。更具体地说,这是我们使用map函数创建并行流的地方。我们在arraylist上调用parallelStream(),对于arraylist中的每个i,我们调用compute函数并将arraylist的元素作为参数传递。最后,我们把所有的结果结合起来。

什么时候应该使用并行流

  • 当有大量数据需要处理时

  • 如果循序渐进的方法让你付出了代价

  • N(元素数)Q(每个元素的成本)应该很大