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 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:
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.RecursiveAction
或 java.util.concurrent.RecursiveTask
接口。RecursiveAction 用于执行不返回值的任务,而 RecursiveTask 则会返回值。java.util.concurrent.ForkJoinPool
创建一个线程池。它将管理 Fork/Join 任务的执行。fork()
方法将任务提交给 Fork/Join 池。池会将任务分解成更小的子任务,并分配给可用的线程。join()
Gunakan java.util.concurrent.ForkJoinPool
untuk mencipta kumpulan benang. Ia akan menguruskan pelaksanaan tugas Fork/Join.
Panggil kaedah fork()
untuk menyerahkan tugasan ke kumpulan Fork/Join. Kumpulan membahagikan tugas kepada subtugas yang lebih kecil dan menugaskannya kepada urutan yang tersedia.
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); } }
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!