利用 ExecutorService 管理執行緒池並執行任務,使用 FutureTask 非同步執行任務並檢索其結果。 ExecutorService 提供了 execute()、submit() 等方法,FutureTask 提供了 get()、isDone()、cancel() 方法。透過實戰案例展示如何使用它們並行計算斐波那契數列中的數字。
Java 平行程式設計中的ExecutorService 和FutureTask 的使用
簡介
ExecutorService 是一個接口,它表示一個可執行執行緒任務的集合。您可以使用下列方法建立 ExecutorService 的不同實作:
ExecutorService executorService = Executors.newFixedThreadPool(5);
:執行一個 Runnable 任務。
:執行一個 Runnable 任務並傳回值。
:執行一個 Callable 任務並傳回值。
FutureTask
FutureTask<String> futureTask = new FutureTask<>(() -> "Hello, world!");
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; class FibonacciTask implements Callable<Long> { private int n; public FibonacciTask(int n) { this.n = n; } @Override public Long call() { long a = 0; long b = 1; for (int i = 0; i < n; i++) { long temp = a; a = b; b = temp + b; } return a; } } public class Main { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(4); FutureTask<Long>[] tasks = new FutureTask[10]; // 创建并提交任务 for (int i = 0; i < 10; i++) { tasks[i] = new FutureTask<>(new FibonacciTask(i)); executorService.submit(tasks[i]); } // 获取并打印结果 for (int i = 0; i < 10; i++) { try { System.out.println("斐波那契数列第 " + i + " 项:" + tasks[i].get()); } catch (Exception e) { e.printStackTrace(); } } // 关闭 ExecutorService executorService.shutdown(); } }
以上是Java平行程式設計中的ExecutorService和FutureTask的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!