検索
ホームページJava&#&チュートリアルJava 9 での非同期プログラミングと同時実行制御に CompletableFuture を使用する方法

CompletableFuture を使用して Java 9 で非同期プログラミングと同時実行制御を実装する方法

はじめに:
最新のアプリケーションにおける高性能と高同時実行の需要の高まりに伴い、非同期プログラミングと同時実行制御が一般的になってきました。開発上の問題。 Java 9 で導入された CompletableFuture クラスは、非同期操作を処理する強力なメカニズムを提供し、同時実行制御を実装するためのシンプルかつ洗練された方法を提供します。この記事では、Java 9 の CompletableFuture の基本概念を紹介し、CompletableFuture を使用して非同期プログラミングと同時実行制御を実装する方法を示すサンプル コードをいくつか紹介します。

1. CompletableFuture の概要

CompletableFuture は、Java 8 で導入された非同期プログラミング メカニズムの補足であり、Future インターフェイスと CompletionStage インターフェイスを実装するクラスです。 Future インターフェイスは、完了できない可能性のある非同期タスクの結果を表すために使用されます。一方、CompletionStage インターフェイスは、非同期で実行される可能性のある計算 (操作のトリガーと結果の返しを含む) および完了する可能性がある後続の操作を表すために使用されます。計算が完了した後にトリガーされます。 CompletableFuture クラスは、これらのインターフェイスを使用するための簡略化された方法を提供し、非同期操作を処理するためのより強力な機能を提供します。

2. 基本的な使用例

  1. CompletableFuture オブジェクトの作成

まず、非同期計算の結果を表す CompletableFuture オブジェクトを作成する必要があります。 CompletableFuture クラスは、completedFuture、supplyAsync など、そのようなオブジェクトを作成するためのさまざまな静的メソッドを提供します。以下はサンプル コードです。

CompletableFuture<String> future = CompletableFuture.completedFuture("Hello, CompletableFuture!");

上記のコードでは、completedFuture メソッドを使用して完成した CompletableFuture オブジェクトを作成し、それに計算結果として文字列を渡します。

  1. 非同期計算のトリガー

次に、非同期計算をトリガーし、前の手順で作成した CompletableFuture オブジェクトに関連付ける必要があります。 CompletableFuture クラスは、これを実現するための 2 つのメソッド、runAsync と SupplyAsync を提供します。前者は結果を返さない非同期操作を実行するために使用され、後者は結果を返す非同期操作を実行するために使用されます。以下はサンプル コードです。

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});

上記のコードでは、supplyAsync メソッドを使用して、整数の結果を返す非同期で実行される計算を作成します。

  1. 非同期計算結果の処理

非同期計算が完了したら、CompletableFuture オブジェクトのメソッドを呼び出して計算結果を処理できます。 CompletableFuture クラスは、thenApply、thenAccept など、結果を処理するためのさまざまなメソッドを提供します。以下はサンプル コードです。

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});
future.thenApply(result -> {
    // 处理结果并返回一个新的结果
    return result * 2;
})
.thenAccept(result -> {
    // 处理最终结果
    System.out.println("Final result: " + result);
});

上記のコードでは、非同期計算の完了後に thenApply メソッドを呼び出して結果を処理し、新しい結果を返します。次に、thenAccept メソッドを呼び出して最終結果を処理し、出力します。

3. 同時実行制御の例

非同期プログラミングに加えて、CompletableFuture は同時実行制御を実装するためのメソッドもいくつか提供します。最も一般的に使用されるメソッドには、anyOf、allOf、join などがあります。

  1. anyOf メソッド

anyOf メソッドは、複数の CompletableFuture のいずれかが完了するのを待機するために使用されます。最初に完了した CompletableFuture オブジェクトの結果として評価される新しい CompletableFuture オブジェクトを返します。以下はサンプル コードです。

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 异步计算1
    return 1;
});
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 异步计算2
    return 2;
});
CompletableFuture<Object> resultFuture = CompletableFuture.anyOf(future1, future2);
resultFuture.thenAccept(result -> {
    System.out.println("First result: " + result);
});

上記のコードでは、anyOf メソッドを使用して、future1 または future2 のいずれかが計算され、結果が出力されるまで待機します。

  1. allOf メソッド

allOf メソッドは、複数の CompletableFuture のすべての計算が完了するのを待つために使用されます。これは、Void 値 (null) に評価される新しい CompletableFuture オブジェクトを返します。サンプル コードは次のとおりです。

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
    // 异步计算1
    return 1;
});
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
    // 异步计算2
    return 2;
});
CompletableFuture<Void> resultFuture = CompletableFuture.allOf(future1, future2);
resultFuture.thenRun(() -> {
    System.out.println("All calculations are completed.");
});

上記のコードでは、allOf メソッドを使用して、future1 と future2 のすべての計算が完了するまで待機し、完了メッセージを出力します。

  1. join メソッド

join メソッドは、CompletableFuture の計算結果を待って結果を返すために使用されます。計算中に例外が発生した場合、例外がスローされます。以下はサンプル コードです。

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
    // 异步计算,返回一个整数结果
    return 42;
});
int result = future.join();
System.out.println("Result: " + result);

上記のコードでは、join メソッドを使用して将来の計算が完了するのを待ち、その結果を取得します。

概要:

この記事では、Java 9 の CompletableFuture の基本概念を紹介し、CompletableFuture を使用して非同期プログラミングと同時実行制御を実装する方法を示すサンプル コードをいくつか示します。 CompletableFuture を使用することで、非同期操作をシンプルかつエレガントな方法で処理し、同時計算の柔軟な制御を実現できます。これらの例が CompletableFuture の理解と使用に役立つことを願っています。

以上がJava 9 での非同期プログラミングと同時実行制御に CompletableFuture を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Javaがクロスプラットフォームデスクトップアプリケーションを開発するための人気のある選択肢なのはなぜですか?Javaがクロスプラットフォームデスクトップアプリケーションを開発するための人気のある選択肢なのはなぜですか?Apr 25, 2025 am 12:23 AM

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する必要がある場合がある状況について話し合います。Javaでプラットフォーム固有のコードを作成する必要がある場合がある状況について話し合います。Apr 25, 2025 am 12:22 AM

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使​​用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

プラットフォームの独立性に関連するJava開発の将来の傾向は何ですか?プラットフォームの独立性に関連するJava開発の将来の傾向は何ですか?Apr 25, 2025 am 12:12 AM

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。

Javaの強力なタイピングは、プラットフォームの独立性にどのように貢献しますか?Javaの強力なタイピングは、プラットフォームの独立性にどのように貢献しますか?Apr 25, 2025 am 12:11 AM

Javaの強力なタイプ化されたシステムは、タイプの安全性、統一タイプの変換、多型を通じてプラットフォームの独立性を保証します。 1)タイプの安全性は、コンパイル時間でタイプチェックを実行して、ランタイムエラーを回避します。 2)統一された型変換ルールは、すべてのプラットフォームで一貫しています。 3)多型とインターフェイスメカニズムにより、コードはさまざまなプラットフォームで一貫して動作します。

Javaネイティブインターフェイス(JNI)がプラットフォームの独立性をどのように妥協できるかを説明します。Javaネイティブインターフェイス(JNI)がプラットフォームの独立性をどのように妥協できるかを説明します。Apr 25, 2025 am 12:07 AM

JNIはJavaのプラットフォームの独立を破壊します。 1)JNIは特定のプラットフォームにローカルライブラリを必要とします。2)ローカルコードをターゲットプラットフォームにコンパイルおよびリンクする必要があります。3)異なるバージョンのオペレーティングシステムまたはJVMは、異なるローカルライブラリバージョンを必要とする場合があります。

Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Javaのプラットフォームの独立性を脅かしたり強化したりする新しいテクノロジーはありますか?Apr 24, 2025 am 12:11 AM

新しいテクノロジーは、両方の脅威をもたらし、Javaのプラットフォームの独立性を高めます。 1)Dockerなどのクラウドコンピューティングとコンテナ化テクノロジーは、Javaのプラットフォームの独立性を強化しますが、さまざまなクラウド環境に適応するために最適化する必要があります。 2)WebAssemblyは、Graalvmを介してJavaコードをコンパイルし、プラットフォームの独立性を拡張しますが、パフォーマンスのために他の言語と競合する必要があります。

JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?JVMのさまざまな実装は何ですか、そしてそれらはすべて同じレベルのプラットフォームの独立性を提供しますか?Apr 24, 2025 am 12:10 AM

JVMの実装が異なると、プラットフォームの独立性が得られますが、パフォーマンスはわずかに異なります。 1。OracleHotspotとOpenJDKJVMは、プラットフォームの独立性で同様に機能しますが、OpenJDKは追加の構成が必要になる場合があります。 2。IBMJ9JVMは、特定のオペレーティングシステムで最適化を実行します。 3. Graalvmは複数の言語をサポートし、追加の構成が必要です。 4。AzulzingJVMには、特定のプラットフォーム調整が必要です。

プラットフォームの独立性は、開発コストと時間をどのように削減しますか?プラットフォームの独立性は、開発コストと時間をどのように削減しますか?Apr 24, 2025 am 12:08 AM

プラットフォームの独立性により、開発コストが削減され、複数のオペレーティングシステムで同じコードセットを実行することで開発時間を短縮します。具体的には、次のように表示されます。1。開発時間を短縮すると、1セットのコードのみが必要です。 2。メンテナンスコストを削減し、テストプロセスを統合します。 3.展開プロセスを簡素化するための迅速な反復とチームコラボレーション。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター