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
DDDasal
2024-11-18 09:38:02894semak imbas

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();
}

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!

Kenyataan:
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