ホームページ >Java >&#&チュートリアル >Java Executor でコールバックを使用してノンブロッキング タスク完了通知を有効にするにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。