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中文網其他相關文章!