Rumah > Java > javaTutorial > Bagaimana untuk menggunakan rangka kerja Fork/Join untuk pengaturcaraan selari dalam pengaturcaraan serentak Java?

Bagaimana untuk menggunakan rangka kerja Fork/Join untuk pengaturcaraan selari dalam pengaturcaraan serentak Java?

WBOY
Lepaskan: 2024-05-08 15:57:02
asal
330 orang telah melayarinya

Bagaimana untuk menggunakan rangka kerja Java Fork/Join untuk pengaturcaraan selari? Buat kelas tugas dan laksanakan antara muka RecursiveAction atau RecursiveTask. Cipta Fork/Join pool dan uruskan pelaksanaan tugas. Panggil kaedah fork() untuk menyerahkan tugasan ke kumpulan dan menguraikannya menjadi subtugas. Panggil kaedah join() untuk menunggu tugas selesai dan mendapatkan keputusan (untuk RecursiveTask).

Java 并发编程中如何使用 Fork/Join 框架进行并行编程?

Java Concurrent Programming: Parallel Programming Menggunakan Fork/Join Framework

Fork/Join Framework ialah perpustakaan Java yang menyediakan rangka kerja yang ringan untuk melaksanakan tugas selari dengan cekap. Ia berdasarkan algoritma mencuri kerja yang membolehkan utas bekerjasama dalam tugasan, dengan itu memaksimumkan penggunaan sumber CPU.

Cara menggunakan rangka kerja Fork/Join:

  1. Buat kelas tugas: Kelas ini perlu melaksanakan java.util.concurrent.RecursiveAction atau java.util. serentak.RecursiveTask antara muka. RecursiveAction digunakan untuk melaksanakan tugas yang tidak mengembalikan nilai, manakala RecursiveTask melakukannya. java.util.concurrent.RecursiveActionjava.util.concurrent.RecursiveTask 接口。RecursiveAction 用于执行不返回值的任务,而 RecursiveTask 则会返回值。
  2. 创建一个 Fork/Join 池:使用 java.util.concurrent.ForkJoinPool 创建一个线程池。它将管理 Fork/Join 任务的执行。
  3. Fork 任务:调用 fork() 方法将任务提交给 Fork/Join 池。池会将任务分解成更小的子任务,并分配给可用的线程。
  4. Join 任务:调用 join()
Buat kumpulan Fork/Join:

Gunakan java.util.concurrent.ForkJoinPool untuk mencipta kumpulan benang. Ia akan menguruskan pelaksanaan tugas Fork/Join.

Tugas garpu:

Panggil kaedah fork() untuk menyerahkan tugasan ke kumpulan Fork/Join. Kumpulan membahagikan tugas kepada subtugas yang lebih kecil dan menugaskannya kepada urutan yang tersedia.

Sertai tugas: 🎜Panggil kaedah join() dan tunggu tugasan selesai. Untuk RecursiveTask, ia juga mengembalikan nilai pulangan kepada utas utama. 🎜🎜🎜🎜Contoh Praktikal: 🎜🎜🎜Andaikan kita mempunyai tugasan selari yang mengira jumlah semua nombor ganjil dalam senarai nombor. Kita boleh melaksanakannya menggunakan rangka kerja Fork/Join seperti berikut: 🎜
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);
    }
}
Salin selepas log masuk
🎜Menjalankan kod ini akan menambah nombor ganjil dalam senarai dan mencetak jumlah tempatan yang dikira oleh setiap utas. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menggunakan rangka kerja Fork/Join untuk pengaturcaraan selari dalam pengaturcaraan serentak Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan