ホームページ >Java >&#&チュートリアル >Java Executor と CompletableFuture を使用して非ブロックでタスクを実行する方法
Java Executor を使用したノンブロッキング タスクの実行
タスクの複数のキューを操作する場合、過度に消費する可能性のあるブロック操作を避けることが重要ですスタックスペース。この記事では、Java の java.util.concurrent パッケージを利用して、タスク完了通知のコールバックを利用して、ブロックせずにタスクを実行プログラムに送信する方法について説明します。
コールバック アプローチ
定義タスクの目的の結果または完了ステータスを受け取るコールバック インターフェイス。タスクとコールバックの両方を受け入れるラッパー クラスを実装します。タスクが完了すると、ラッパーはコールバックを呼び出します。
CompletableFuture と非同期実行
Java 8 では、非同期および条件付きを構成するためのより高度なメカニズムを提供する CompletableFuture が導入されました。パイプライン。スレッド プールでタスクを実行する CompletableFuture を作成します。次に、タスクの完了時に呼び出されるリスナーを Future にアタッチします。
例
次のコード スニペットは、ノンブロッキング タスク実行のための CompletableFuture の使用を示しています。 :
import java.util.concurrent.CompletableFuture; // Service class to perform the task class ExampleService { public String work() { // Simulated work char[] str = new char[5]; ThreadLocalRandom current = ThreadLocalRandom.current(); for (int idx = 0; idx < str.length; ++idx) str[idx] = (char) ('A' + current.nextInt(26)); String msg = new String(str); System.out.println("Generated message: " + msg); return msg; } } // Main class public class Main { public static void main(String[] args) { ExampleService svc = new ExampleService(); CompletableFuture<String> f = CompletableFuture.supplyAsync(svc::work); // Attach a listener to the future f.thenAccept(result -> System.out.println("Result: " + result)); // Main method can continue execution without blocking System.out.println("Main method exiting"); } }
このコードは、 work() メソッドを実行する CompletableFuture を作成します非同期的に。 thenAccept() メソッドは、CompletableFuture の完了時に呼び出されるリスナーをアタッチし、タスクのノンブロッキング実行を可能にします。
以上がJava Executor と CompletableFuture を使用して非ブロックでタスクを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。