有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

乍一看,Java 8中有多种方法可以完成这类任务,例如:

  1. forEach();内有lambda表达式:
    itemsArr.forEach(item -> item.setValue("test"));
  2. forEach();使用迭代器
  3. 将数组分离为多个批次/块,并在单独的线程中处理每个批次。例如:定义两个线程,从#0到999的元素将在线程«a»中执行,其余元素将在线程«B»中执行

最终的结果应该是:100%的数组元素都应该关心
完成这项任务的最佳方法是什么

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    虽然您似乎有一个集合,而不是数组,所以:

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