ホームページ >Java >&#&チュートリアル >Java Executor と CompletableFuture を使用して非ブロックでタスクを実行する方法

Java Executor と CompletableFuture を使用して非ブロックでタスクを実行する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-16 17:28:03898ブラウズ

How to Execute Tasks Non-Blockingly with Java Executors and 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 サイトの他の関連記事を参照してください。

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