2013-07-04 100 views
1

我遇到了openMP,它可以用來並行化c,C++中的for循環。當然,OpenMP可以做的遠不止這些。但我很好奇,如果我們可以並行化java中的for循環來優化程序的性能。假設我在for循環中有n次迭代,有沒有辦法平行運行這些迭代?在java中並行化for循環

+2

使用線程應該有所幫助嗎? –

+0

@JunedAhsan:儘管如此,理想情況下,還是有更高級別的解決方案。 – Thilo

+0

如果每次迭代花費大量時間並且獨立於循環中以前的計算,則使用ThreadPoolExecutor並將計算結果作爲任務提交。 – Tala

回答

4

如果每次迭代都需要很多時間並且獨立於以前的循環計算,那麼使用ExecutorService並將計算作爲任務提交。

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 
     } 
    }); 
} 
+0

當我嘗試按照你的建議做,即時通訊獲取以下錯誤:不能引用在一個不同的方法中定義的內部類中的非最終變量。我的for循環處理一些非最終變量。 – Praveen

+0

添加示例如何解決此問題 – Tala

+0

謝謝,簡潔有效的答案。也許增加'executorService.shutdown()'來幫助同步一些東西。 – Austin