Dalam senario di mana berbilang baris gilir menahan tugas untuk dilaksanakan secara berurutan oleh perkhidmatan pelaksana, operasi menyekat boleh menggunakan ruang tindanan yang berlebihan. Untuk mengurangkan isu ini, pendekatan tidak menyekat diingini.
Satu penyelesaian melibatkan penentuan antara muka panggil balik dengan kaedah untuk memproses hasil dan lulus parameter yang diperlukan. Antara muka ini boleh dilaksanakan dalam kelas pembalut untuk tugasan Boleh Dijalankan, yang kemudiannya diserahkan kepada perkhidmatan pelaksana. Selepas tugas selesai, antara muka panggil balik dipanggil.
interface Callback { void complete(); } class CallbackTask implements Runnable { private final Runnable task; private final Callback callback; CallbackTask(Runnable task, Callback callback) { this.task = task; this.callback = callback; } public void run() { task.run(); callback.complete(); } }
Sebagai alternatif, Java 8 memperkenalkan CompletableFuture, yang menyediakan mekanisme untuk komposisi tugas tak segerak dan pemprosesan bersyarat. Berikut ialah contoh menggunakan CompletableFuture:
CompletableFuture<String> f = CompletableFuture.supplyAsync(() -> ExampleService.work()); f.thenAccept(listener::notify);
Dalam contoh ini, ExampleService.work() ialah tugas yang akan dilaksanakan secara tak segerak. Kaedah makluman ialah panggilan balik yang akan digunakan apabila tugasan selesai.
Menggunakan teknik ini, tugasan boleh diserahkan kepada perkhidmatan pelaksana tanpa menyekat, membolehkan pemprosesan yang cekap bagi baris gilir besar sambil mengelakkan keletihan ruang tindanan.
Atas ialah kandungan terperinci Bagaimanakah Pelaksana Java Boleh Mengendalikan Pemberitahuan Penyiapan Tugas Asynchronous Tanpa Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!