【问题标题】:Generally multithreading a for loop in Java通常在 Java 中多线程处理一个 for 循环
【发布时间】:2023-01-06 22:03:40
【问题描述】:

假设我得到整数 ab,这样就形成了一个感兴趣的范围,由 [a,b] 中的整数组成。该范围可以跨越 10^9 整数。我想对所有整数 a <= n <= b 的给定函数 f : N -> N 求和。范围非常大,所以我想使用多线程来做到这一点。

不那么正式,我想并行化以下代码:

long sum = 0;
    
for (long n = a ; n <= b ; n++)
    sum += f(n);
    
System.out.println(sum);

理想情况下(至少在我看来),该范围将平均分配给处理器可用的可用线程数(假设 f(n) 具有与范围内的每个 n 几乎相同的复杂性和运行时间)。这些值是完全独立的,f实际上可以是任何函数。例如,它可以输出数字的位数之和,但它实际上可以是任何东西,这只是一个例子。

有没有一种通用的方法可以使用多线程在 Java 中做到这一点?

【问题讨论】:

    标签: java multithreading algorithm performance loops


    【解决方案1】:

    这个特殊的用例非常适合并行流。你可以这样实现它:

    long sum = LongStream.rangeClosed(a, b)
        .parallel()
        .map(n -> f(n))
        .sum();
    
    System.out.println(sum);
    

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2020-09-25
      • 2023-03-03
      相关资源
      最近更新 更多