Pelaksana Java: Pemberitahuan Tidak Menyekat untuk Penyiapan Tugas
Apabila berhadapan dengan pemprosesan banyak tugas melalui perkhidmatan pelaksana, penyekatan boleh menjadi perkara yang penting halangan kerana kekangan ruang tindanan. Untuk memintas isu ini, pertimbangkan untuk menggunakan pendekatan panggil balik, di mana tugasan menyerahkan pemberitahuan tidak menyekat setelah selesai.
Mencipta Antara Muka Panggilan Balik
Tentukan antara muka panggil balik yang merangkumkan yang dikehendaki parameter untuk pemberitahuan penyiapan. Dalam contoh kod yang disediakan:
public interface Callback { void complete(); }
Membungkus Tugas dengan Panggilan Balik
Gunakan antara muka panggil balik ini untuk mencipta kelas pembalut untuk tugasan Boleh Dijalankan:
class CallbackTask implements Runnable { private final Runnable task; private final Callback callback; CallbackTask(Runnable task, Callback callback) { this.task = task; this.callback = callback; } @Override public void run() { task.run(); callback.complete(); } }
Menyerahkan Tugasan dengan Panggilan Balik
Dengan pembungkus panggilan balik tersedia, serahkan tugas kepada perkhidmatan pelaksana seperti berikut:
ExecutorService executor = Executors.newSingleThreadExecutor(); executor.submit(new CallbackTask(task, callback));
Panggil Balik Pemberitahuan
Laksanakan panggilan balik untuk mengendalikan pemberitahuan penyiapan dan melaksanakan tugas seterusnya daripada baris gilir:
public class CallbackImpl implements Callback { private Queue<Task> queue; @Override public void complete() { if (!queue.isEmpty()) { executor.submit(new CallbackTask(queue.poll(), this)); } } }
Java 8's CompletableFuture
Sejak Java 8, kelas CompletableFuture menawarkan pendekatan yang lebih komprehensif untuk mencipta dan mengurus proses tak segerak:
CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work); f.thenAccept(listener::notify);
Kod ini mencipta CompletableFuture yang mewakili tak segerak tugasan dan mentakrifkan panggilan balik untuk dicetuskan apabila selesai.
Atas ialah kandungan terperinci Bagaimanakah Panggilan Balik Boleh Mendayakan Pemberitahuan Penyiapan Tugas Tidak Menyekat dalam Pelaksana Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!