Rumah > Java > javaTutorial > Bagaimanakah Panggilan Balik Boleh Mendayakan Pemberitahuan Penyiapan Tugas Tidak Menyekat dalam Pelaksana Java?

Bagaimanakah Panggilan Balik Boleh Mendayakan Pemberitahuan Penyiapan Tugas Tidak Menyekat dalam Pelaksana Java?

DDD
Lepaskan: 2024-11-18 09:38:02
asal
894 orang telah melayarinya

How Can Callbacks Enable Non-Blocking Task Completion Notifications in Java Executors?

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();
}
Salin selepas log masuk

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();
  }
}
Salin selepas log masuk

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));
Salin selepas log masuk

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));
    }
  }
}
Salin selepas log masuk

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);
Salin selepas log masuk

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!

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