Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mendapatkan Pemberitahuan Penyelesaian Tugas Tanpa Menyekat dalam Java Executors?

Linda Hamilton
Lepaskan: 2024-11-17 05:57:03
asal
699 orang telah melayarinya

How to Get Task Completion Notifications Without Blocking in Java Executors?

Pelaksana Java: Memberitahu Tanpa Menyekat pada Penyiapan Tugas

Pernyataan Masalah

Barisan tugasan mesti diproses secara berurutan. Walaupun pendekatan paling mudah melibatkan penyekatan pada setiap penyiapan tugas menggunakan .get() pada Masa Depan, pendekatan ini boleh membawa kepada isu ingatan apabila menguruskan banyak baris gilir. Matlamatnya adalah untuk melaksanakan mekanisme bukan sekatan yang memberitahu pemanggil apabila tugasan selesai, membolehkan tugasan diproses secara berurutan tanpa menyekat.

Penyelesaian

Untuk mengelakkan sekatan, penyelesaian melibatkan penentuan antara muka panggil balik yang menerima parameter semasa tugas selesai. Panggilan balik ini kemudiannya dipanggil pada penghujung setiap tugas.

Tugas Panggilan Balik Tersuai

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

}
Salin selepas log masuk

CompletableFuture

Java 8 memperkenalkan CompletableFuture, yang menyediakan mekanisme yang lebih komprehensif untuk mencipta talian paip tak segerak dan bersyarat.

import java.util.concurrent.CompletableFuture;

public class GetTaskNotificationWithoutBlocking {

  public static void main(String... argv) throws Exception {
    ExampleService svc = new ExampleService();
    GetTaskNotificationWithoutBlocking listener = new GetTaskNotificationWithoutBlocking();
    CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work);
    f.thenAccept(listener::notify);
  }

}
Salin selepas log masuk

Dalam Contoh Kelas Perkhidmatan:

class ExampleService {

  String work() {
    // Code to perform long-running task
    return "Result from long-running task";
  }

}
Salin selepas log masuk

Dalam kelas pendengar:

class GetTaskNotificationWithoutBlocking {

  void notify(String msg) {
    // Code to handle the message from the completed task
  }

}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Pemberitahuan Penyelesaian Tugas Tanpa Menyekat dalam Java Executors?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan