ホームページ  >  記事  >  Java  >  CompletableFuture を使用して Java で非同期同時プログラミングを実装するにはどうすればよいですか?

CompletableFuture を使用して Java で非同期同時プログラミングを実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-05-04 17:03:01949ブラウズ

CompletableFuture を使用して Java で非同期同時プログラミングを実装します。 CompletableFuture を作成します。 CompletableFuture.supplyAsync() を通じて CompletableFuture を作成します。これは、パラメーターなしのメソッドをパラメーターとして受け取り、値を返します。完了状況の処理: whenComplete()、thenApply()、thenAccept()、Exceptionally()、および handle() メソッドを使用して、タスクの完了、例外、キャンセルの状況を処理します。 CompletableFuture の結合: thenCompose() メソッドを使用して 2 つの CompletableFuture を連結します。実践的なケース: CompletableFuture を使用してデータベースからユーザーのリストを並行して取得し、リモート API から各ユーザーの詳細を取得する方法を示します。

如何在 Java 中使用 CompletableFuture 实现异步并发编程?

#CompletableFuture を使用して Java で非同期同時プログラミングを実装するにはどうすればよいですか?

はじめに

CompletableFuture は、Java 8 で導入された同時実行ユーティリティ クラスで、タスクを非同期に実行し、その完了を処理できるようにします。従来のスレッドよりもエレガントで簡素化された同時実行性の管理方法を提供します。

基本的な使用法

CompletableFuture を作成するには、Supplier をパラメーターとして受け入れる CompletableFuture.supplyAsync() メソッドを使用できます。 Supplier はパラメータを持たないメソッドであり、値を返します。

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");

完了の処理

CompletableFuture の主な機能の 1 つは、タスクの完了を処理する機能です。完了、例外、およびキャンセルの状況を処理するためのさまざまなメソッドが提供されます。

  • whenComplete(): タスクが完了したかどうかに関係なく、タスクの完了後に指定されたアクションを実行します。成功したかどうか。
  • thenApply(): 指定された関数を実行し、タスクが正常に完了した後に新しい値を返します。
  • thenAccept(): タスクが正常に完了した後、指定されたコンシューマを実行します。
  • Exceptionally(): タスクが失敗した後に指定された例外ハンドラーを実行し、新しい値を返します。
  • handle(): タスクが正常に完了したかどうかに関係なく、タスクの完了後に指定された関数を実行し、新しい値を返します。

CompletableFuture の結合

CompletableFuture を結合して、より複雑な並列タスクを作成できます。たとえば、thenCompose() メソッドを使用して 2 つの CompletableFuture を連結できます。

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2);

future1.thenCompose(x -> future2.thenApply(y -> x + y));

実際的なケース

次のタスクがあるとします。並列実行が必要です:

  • データベースからユーザー リストを取得します
  • リモート API から各ユーザーの詳細を取得します

CompletableFuture を使用できます実装するには:

CompletableFuture<List<User>> futureUsers = CompletableFuture.supplyAsync(() -> getUsersFromDatabase());

CompletableFuture<Map<Integer, UserDetail>> futureDetails = CompletableFuture.supplyAsync(() -> {
    List<User> users = futureUsers.get();
    return getUsersDetailsFromApi(users);
});

CompletableFuture<List<User>> combinedFuture = futureUsers.thenCombine(futureDetails, (users, details) -> {
    for (User user : users) {
        user.setDetails(details.get(user.getId()));
    }
    return users;
});

この例では、CompletableFuture を使用して、さまざまなソースから並行してデータをフェッチし、それらを結合する方法を示します。

以上がCompletableFuture を使用して Java で非同期同時プログラミングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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