首頁  >  文章  >  Java  >  Java平行程式設計中的ExecutorService和FutureTask的使用

Java平行程式設計中的ExecutorService和FutureTask的使用

WBOY
WBOY原創
2024-04-18 09:36:021130瀏覽

利用 ExecutorService 管理執行緒池並執行任務,使用 FutureTask 非同步執行任務並檢索其結果。 ExecutorService 提供了 execute()、submit() 等方法,FutureTask 提供了 get()、isDone()、cancel() 方法。透過實戰案例展示如何使用它們並行計算斐波那契數列中的數字。

Java平行程式設計中的ExecutorService和FutureTask的使用

Java 平行程式設計中的ExecutorService 和FutureTask 的使用

簡介

  • ## ExecutorService 和FutureTask 是Java 中進行平行程式設計的實用工具。 ExecutorService 允許您管理一組線程,而 FutureTask 允許您非同步執行任務並檢索其結果。
  • ExecutorService

ExecutorService 是一個接口,它表示一個可執行執行緒任務的集合。您可以使用下列方法建立 ExecutorService 的不同實作:

ExecutorService executorService = Executors.newFixedThreadPool(5);

其中,5 表示執行緒池中的執行緒數。

ExecutorService 提供以下方法來執行任務:

execute(Runnable task)

:執行一個 Runnable 任務。

  • submit(Runnable task):執行一個 Runnable 任務並傳回值。
  • submit(Callable task):執行一個 Callable 任務並傳回值。
  • FutureTask
FutureTask 是一個 Callable 任務的包裝器,它允許您非同步執行任務並稍後檢索其結果。您可以使用下列方法建立 FutureTask:

FutureTask<String> futureTask = new FutureTask<>(() -> "Hello, world!");
其中,() -> "Hello, world!"

是要執行的 Callable 任務。

FutureTask 提供以下方法來擷取任務結果:

######get()###:阻斷等待任務完成並傳回結果。 #########isDone()###:檢查任務是否已完成。 #########cancel(boolean mayInterruptIfRunning)###:取消任務(如果可能)。 ############實戰案例#########考慮一個計算斐波那契數列的程式。我們可以使用 ExecutorService 和 FutureTask 並行計算多個斐波那契數:###
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();
    }
}
###在這個範例中,我們建立了一個 ExecutorService 並提交了 10 個 FibonacciTask 任務。每個任務計算斐波那契數列中的一個數字。使用 FutureTask,我們能夠非同步執行這些任務並稍後取得其結果。 ###

以上是Java平行程式設計中的ExecutorService和FutureTask的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn