ホームページ >Java >&#&チュートリアル >Java Executor でコールバックを使用してノンブロッキング タスク完了通知を有効にするにはどうすればよいですか?

Java Executor でコールバックを使用してノンブロッキング タスク完了通知を有効にするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-18 09:38:02894ブラウズ

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

Java Executor: タスク完了のノンブロッキング通知

Executor サービスを通じて多数のタスクを処理する場合、ブロッキングが重要な問題になる可能性があります。スタックスペースの制約による障害。この問題を回避するには、タスクが完了時に非ブロッキング通知を送信するコールバック アプローチの採用を検討してください。

コールバック インターフェイスの作成

必要な内容をカプセル化するコールバック インターフェイスを定義します。完了通知用のパラメータです。提供されたコード例:

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

でタスクを送信コールバック

コールバック ラッパーを配置したら、次のようにタスクを executor サービスに送信します。

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

通知コールバック

実装完了通知を処理し、次のタスクを実行するコールバックqueue:

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 Executor でコールバックを使用してノンブロッキング タスク完了通知を有効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。