検索
ホームページJava&#&チュートリアルJava での非同期マージ操作に CompletableFuture の thenCompose 関数と thenCombine 関数を使用する方法

Java では、非同期操作が必要なシナリオによく遭遇します。この状況に対処するために、Java 8 では CompletableFuture クラスを導入しました。このクラスは、非同期プログラミングをよりシンプルかつ簡単にするための豊富な非同期プログラミング ツールを提供します。このうち、thenCompose と thenCombine は、CompletableFuture クラスで一般的に使用される 2 つの組み合わせの非同期操作メソッドです。

1. thenCompose

thenCompose メソッドの使用は、CompletableFuture インスタンスを別の CompletableFuture インスタンスに変換するために使用されます。具体的には、以前の CompletableFuture によって返された結果を入力として受け取り、新しい CompletableFuture オブジェクトを返す Function パラメータを受け取ります。以下に例を示します。

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 10;
});

CompletableFuture<Integer> result = future.thenCompose(value -> CompletableFuture.supplyAsync(() -> value * 2));

result.whenComplete((res, ex) -> {
    if (ex != null) {
        ex.printStackTrace();
    } else {
        System.out.println(res);
    }
});

上記のコードでは、まず CompletableFuture インスタンスを作成します。これは、別のスレッドでの計算時間をシミュレートします。次に、thenCompose メソッドを使用して、それを新しい CompletableFuture インスタンスに変換します。これにより、以前の CompletableFuture によって返された結果が 2 倍されます。最後に、whenComplete メソッドを使用して、結果またはエラー メッセージを出力します。

2. thenCombine の使用

thenCombine メソッドは、2 つの CompletableFuture インスタンスを 1 つにマージするために使用されます。具体的には、別の CompletableFuture インスタンスと、2 つの CompletableFuture によって返された結果を入力として受け取り、新しい CompletableFuture オブジェクトを返す BiFunction パラメーターを受け取ります。以下に例を示します。

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 10;
});

CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 5;
});

CompletableFuture<Integer> result = future1.thenCombine(future2, (value1, value2) -> value1 + value2);

result.whenComplete((res, ex) -> {
    if (ex != null) {
        ex.printStackTrace();
    } else {
        System.out.println(res);
    }
});

上記のコードでは、2 つの CompletableFuture インスタンスを作成し、それぞれ 2 つのコンピューティング タスクの実行をシミュレートしました。次に、thenCombine メソッドを使用して、2 つの CompletableFuture インスタンスを新しいインスタンスにマージし、最初の 2 つの CompletableFuture によって返された結果を追加します。最後に、whenComplete メソッドを使用して、結果またはエラー メッセージを出力します。

3. thenCompose と thenCombine を使用して複雑な非同期操作を実装する

thenCompose メソッドと thenCombine メソッドの使用法をすでに紹介しましたが、どちらも非常に便利な非同期操作メソッドです。実際、これらを使用して、複数の計算結果に対する集計操作など、より複雑な非同期操作を実装することもできます。

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 10;
});

CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 5;
});

CompletableFuture<Integer> future3 = CompletableFuture.supplyAsync(() -> {
    // 模拟计算耗时
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 20;
});

CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2, future3);

CompletableFuture<Integer> result = combinedFuture.thenCompose(
        voidResult -> CompletableFuture.supplyAsync(() -> {
            int sum = future1.join() + future2.join() + future3.join();
            return sum;
        }));

result.whenComplete((res, ex) -> {
    if (ex != null) {
        ex.printStackTrace();
    } else {
        System.out.println(res);
    }
});

上記のコードでは、3 つの CompletableFuture インスタンスを作成しました。それぞれがコンピューティング タスクの実行をシミュレートし、対応する結果を返します。次に、CompletableFuture.allOf メソッドを使用して、これら 3 つのインスタンスを結合し、新しい CompletableFuture インスタンスを作成します。ここで、allOf メソッドは Void 型の CompletableFuture インスタンスを返し、その戻り値は null であることに注意してください。

次に、thenCompose メソッドを使用して、null を返す上記の CompletableFuture インスタンスを新しい CompletableFuture インスタンスに変換します。これにより、前の 3 つの CompletableFuture によって返された結果が追加されます。 thenCompose メソッドのコールバック関数では、join() メソッドを使用して各 CompletableFuture インスタンスの結果値を取得し、対応する計算を実行します。最後に、whenComplete メソッドを使用して、結果またはエラー メッセージを出力します。

一般に、thenCompose と thenCombine は CompletableFuture クラスの非常に便利なメソッドであり、非同期操作をより便利に実行し、プログラムの同時実行性と実行効率を向上させるのに役立ちます。

以上がJava での非同期マージ操作に CompletableFuture の thenCompose 関数と thenCombine 関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。