首頁 >Java >java教程 >回呼如何在 Java 執行器中啟用非阻塞任務完成通知?

回呼如何在 Java 執行器中啟用非阻塞任務完成通知?

DDD
DDD原創
2024-11-18 09:38:02894瀏覽

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

Java 執行器:任務完成的非阻塞通知

當面對透過執行器服務處理大量任務時,阻塞可能成為一個重要的問題由於堆疊空間限製而產生的障礙。若要避免此問題,請考慮採用回呼方法,任務在完成時提交非阻塞通知。

建立回呼介面

定義一個封裝所需的回呼介面完成通知的參數。在提供的程式碼範例中:

public 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;
  }

  @Override
  public void run() {
    task.run();
    callback.complete();
  }
}

使用回呼提交任務

使用回調包裝器,將任務提交到執行器服務,如下所示:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(new CallbackTask(task, callback));

通知回調

實作回調來處理完成通知並執行佇列中的下一個任務:

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 的CompletableFuture

Java 8 中的CompletableFuture 類別提供了一種更全面的方法來建立和管理非同步進程:

CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work);
f.thenAccept(listener::notify);
此程式碼建立一個代表非同步任務的CompletableFuture,並定義在其完成時觸發的回調。

以上是回呼如何在 Java 執行器中啟用非阻塞任務完成通知?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn