在多个线程中使用forEach()或使用forEach()和lambdas进行集合迭代

时间:2016-01-09 16:56:13

标签: java multithreading performance lambda iteration

假设我有一个内部有数千个独立对象的数组。现在我想要传递它们并执行相同的操作,例如,更改特定字段的值。

乍一看,Java 8中有多种方法可以执行此类任务,例如:

  1. forEach();里面有lambda表达式:
    itemsArr.forEach(item -> item.setValue("test"));
  2. forEach(); with iterator。
  3. 将数组分隔为多个批次/块,并在单独的线程中处理每个批次。例如:定义2个线程,#0到999的元素将在线程«A»中执行,其余元素在线程«B»中执行。
  4. 最终结果应该是:100%的数组元素应该得到关注 这项任务的最佳方法是什么?

    更新 有一个类似的question,但谈到另一个方面,我很感兴趣,不是不同类型的循环性能比较(whilefor,{{1但是在数组遍历任务中威胁与lambdas 的性能比较?

1 个答案:

答案 0 :(得分:8)

使用并行流,JVM将使用多个线程处理该流:

Arrays.stream(itemsArr).parallel().forEach(item -> item.setValue("test"));

虽然你似乎有一个Collection,而不是一个数组,所以:

itemsArr.parallelStream().forEach(item -> item.setValue("test"));