Pelaksanaan Tugasan Tidak Menyekat dengan Pelaksana Java
Apabila bekerja dengan berbilang barisan tugas, adalah penting untuk mengelakkan operasi menyekat yang boleh memakan penggunaan berlebihan ruang timbunan. Artikel ini meneroka cara menggunakan pakej java.util.concurrent Java untuk menyerahkan tugas kepada pelaksana tanpa menyekat, memanfaatkan panggilan balik untuk pemberitahuan penyelesaian tugas.
Pendekatan Panggilan Balik
Tentukan antara muka panggil balik yang menerima keputusan yang dikehendaki atau status penyiapan tugas. Laksanakan kelas pembalut yang menerima kedua-dua tugasan dan panggilan balik. Apabila tugasan selesai, pembalut memanggil panggilan balik.
CompletableFuture and Asynchronous Execution
Java 8 memperkenalkan CompletableFuture, yang menawarkan mekanisme yang lebih canggih untuk mengarang tak segerak dan bersyarat saluran paip. Cipta CompletableFuture yang melaksanakan tugas dalam kumpulan benang. Kemudian, lampirkan pendengar pada masa hadapan yang akan digunakan selepas tugasan selesai.
Contoh
Coretan kod berikut menunjukkan penggunaan CompletableFuture untuk pelaksanaan tugas tanpa sekatan :
import java.util.concurrent.CompletableFuture; // Service class to perform the task class ExampleService { public String work() { // Simulated work char[] str = new char[5]; ThreadLocalRandom current = ThreadLocalRandom.current(); for (int idx = 0; idx < str.length; ++idx) str[idx] = (char) ('A' + current.nextInt(26)); String msg = new String(str); System.out.println("Generated message: " + msg); return msg; } } // Main class public class Main { public static void main(String[] args) { ExampleService svc = new ExampleService(); CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work); // Attach a listener to the future f.thenAccept(result -> System.out.println("Result: " + result)); // Main method can continue execution without blocking System.out.println("Main method exiting"); } }
Kod ini mencipta CompletableFuture yang melaksanakan kaedah work() secara tidak segerak. Kaedah thenAccept() melampirkan pendengar yang akan digunakan apabila CompletableFuture selesai, membenarkan pelaksanaan tugas tanpa sekatan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Tugas Tanpa Sekat dengan Java Executors dan CompletableFuture?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!