如何使用 Java Fork/Join 框架進行平行程式設計?建立任務類,實作 RecursiveAction 或 RecursiveTask 介面。建立 Fork/Join 池,管理任務執行。呼叫 fork() 方法提交任務到池中,分解為子任務。呼叫 join() 方法等待任務完成並取得結果(對於 RecursiveTask)。
Java 並發程式設計:使用Fork/Join 框架進行平行程式設計
Fork/Join 框架是一個Java 函式庫,它提供了高效能執行並行任務的輕量級框架。它基於工作竊取演算法,使執行緒能夠協作處理任務,從而最大限度地利用 CPU 資源。
如何使用Fork/Join 框架:
java.util. concurrent.RecursiveAction
或java.util.concurrent.RecursiveTask
介面。 RecursiveAction 用於執行不傳回值的任務,而 RecursiveTask 則會傳回值。 java.util.concurrent.ForkJoinPool
建立一個執行緒池。它將管理 Fork/Join 任務的執行。 fork()
方法將任務提交給 Fork/Join 池。池會將任務分解成更小的子任務,並指派給可用的執行緒。 join()
方法等待任務完成。對於 RecursiveTask,它也將傳回值傳回給主執行緒。 實戰案例:
假設我們有一個計算數字清單中所有奇數和的平行任務。我們可以使用 Fork/Join 框架如下實作:
import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; public class OddSumTask extends RecursiveAction { private int[] numbers; private int start; private int end; public OddSumTask(int[] numbers, int start, int end) { this.numbers = numbers; this.start = start; this.end = end; } @Override protected void compute() { int sum = 0; for (int i = start; i < end; i++) { if (numbers[i] % 2 != 0) { sum += numbers[i]; } } System.out.println("Partial sum: " + sum); } } public class Main { public static void main(String[] args) { // 创建一个数字列表 int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 创建一个 Fork/Join 池 ForkJoinPool pool = new ForkJoinPool(); // 创建一个 OddSumTask OddSumTask task = new OddSumTask(numbers, 0, numbers.length); // Fork 任务 pool.invoke(task); } }
執行此程式碼會將清單中的奇數相加,並列印出每個執行緒計算的局部和。
以上是Java 並發程式設計如何使用 Fork/Join 框架進行平行程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!