【问题标题】:Parallelize for loops in java在java中并行化for循环
【发布时间】:2013-07-04 06:25:22
【问题描述】:

我遇到过 openMP,它可以用于并行化 c、C++ 中的 for 循环。当然,OpenMP 可以做的远不止这些。但我很好奇我们是否可以并行化 Java 中的 for 循环以优化程序的性能。假设我在 for 循环中有 n 次迭代,有没有办法并行运行这些迭代?

【问题讨论】:

  • 使用线程应该有帮助吗?
  • @JunedAhsan:理想情况下,有一个更高级的解决方案。
  • 如果每次迭代花费大量时间并且独立于循环中先前的计算,则使用 ThreadPoolExecutor 并将计算作为任务提交。
  • 我建议在提交包含大量重复项的问题之前尝试基本的google search。参见例如this question
  • 您可以使用 Java 8 流使集合迭代并行。

标签: java multithreading openmp


【解决方案1】:

如果每次迭代花费大量时间并且独立于循环中的先前计算,则使用 E​​xecutorService 并将计算作为任务提交。

ExecutorService executorService = Executors.newFixedThreadPool(4); // number of threads
for (int i = 0; i < n; i++) {
   // declare variables as final which will be used in method run below
   final int count = i;
   executorService.submit(new Runnable() {
       @Override
       public void run() {
           //do your long stuff and can use count variable
       }
   });
}

【讨论】:

  • 当我尝试按照您的建议进行操作时,我收到以下错误:无法引用以不同方法定义的内部类中的非最终变量。我的 for 循环处理一些非最终变量。
  • 谢谢,简洁有效的回答。也许添加executorService.shutdown() 来帮助同步一些东西。
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多