Rumah  >  Artikel  >  Java  >  Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading?

Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading?

王林
王林asal
2024-04-27 10:09:01764semak imbas

Bagaimana untuk membuat tugasan selari menggunakan rangka kerja Fork/Join di Java? Tentukan logik tugasan, kira keputusan atau lakukan tindakan. Cipta ForkJoinPool untuk mengurus benang selari. Gunakan kaedah fork() untuk menyerahkan tugas. Gunakan kaedah join() untuk mendapatkan hasil tugasan.

Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading?

Java Fork/Join Framework: Alat berkuasa dalam concurrency dan multi-threading

Fork/Join framework ialah alat berkuasa dalam pustaka concurrency Java yang menggunakan strategi bahagi dan takluk untuk menyelaraskan tugas. Ia berdasarkan algoritma "mencuri tugas", di mana utas bekerjasama dalam tugasan dan mencuri tugasan daripada baris gilir yang dikongsi.

Cara menggunakan rangka kerja Fork/Join

  1. untuk mencipta kelas RecursiveTask atau RecursiveAction: Tentukan logik pelaksanaan tugas, yang digunakan untuk mengira keputusan atau melakukan tindakan masing-masing.
  2. Buat ForkJoinPool: Buat kumpulan benang untuk mengurus benang serentak.
  3. Serahkan tugas: Gunakan kaedah fork() untuk menyerahkan tugasan ke kumpulan benang. fork() 方法提交任务到线程池。
  4. 获取结果:使用 join() 方法获取任务的执行结果。

实战案例:斐波那契数列

使用 Fork/Join 框架计算斐波那契数列:

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;

class FibonacciTask extends RecursiveTask<Long> {

    private final int n;

    public FibonacciTask(int n) {
        this.n = n;
    }

    @Override
    public Long compute() {
        if (n <= 1) {
            return (long) n;
        } else {
            FibonacciTask leftTask = new FibonacciTask(n - 1);
            FibonacciTask rightTask = new FibonacciTask(n - 2);
            leftTask.fork();
            rightTask.fork();
            return leftTask.join() + rightTask.join();
        }
    }
}

public class FibonacciForkJoin {

    public static void main(String[] args) {
        ForkJoinPool pool = new ForkJoinPool();
        int n = 40;
        FibonacciTask task = new FibonacciTask(n);
        Long result = pool.invoke(task);
        System.out.println("斐波那契数列第 " + n + " 项为:" + result);
    }
}

这个示例创建了一个 FibonacciTask 类,它重写了 compute() 方法来计算斐波那契数列。它使用 fork() 方法将子任务提交到线程池,并使用 join() 方法获取结果。FibonacciForkJoin 类创建一个 ForkJoinPool 并提交 FibonacciTask

🎜Dapatkan keputusan: 🎜Gunakan kaedah join() untuk mendapatkan hasil pelaksanaan tugas. 🎜🎜🎜Kes praktikal: Jujukan Fibonacci🎜🎜🎜Gunakan rangka kerja Fork/Join untuk mengira Jujukan Fibonacci:🎜rrreee🎜Contoh ini mencipta kelas FibonacciTask, yang Wrote semula kaedah code>compute() untuk mengira jujukan Fibonacci. Ia menggunakan kaedah fork() untuk menyerahkan subtugasan kepada kumpulan benang dan kaedah join() untuk mendapatkan hasilnya. Kelas FibonacciForkJoin mencipta ForkJoinPool dan menyerahkan FibonacciTask, kemudian mendapatkan dan mencetak hasilnya. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan rangka kerja Fork/Join dalam fungsi Java concurrency dan multi-threading?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn