Java 関数の同時実行性とマルチスレッドで Future と CompletableFuture を使用する方法は?

王林
リリース: 2024-04-27 16:33:01
オリジナル
1110 人が閲覧しました

Future と CompletableFuture は、Java の同時実行性とマルチスレッド化のためのツールです。 Future は非同期計算結果を表し、結果を取得するスレッドをブロックする get() メソッドを提供します。 CompletableFuture は Future を拡張して、計算の結合、例外の処理、コールバック関数の使用など、より豊富な機能を提供します。

Java 関数の同時実行性とマルチスレッドで Future と CompletableFuture を使用する方法は?

#Java 関数の同時実行性とマルチスレッド: Future と CompletableFuture の使用

#概要Future と CompletableFuture は、非同期操作と同時タスクを処理するために Java 8 で導入された同時実行ツールです。これにより、メインスレッドをブロックすることなく、長時間実行される操作を実行できるようになり、アプリケーションのパフォーマンスと応答性が向上します。

Future

Future は、非同期計算の結果を表すオブジェクトです。結果が得られるまで現在のスレッドをブロックするメソッド get()

を提供します。

isDone() メソッドを使用して、計算が完了したかどうかを確認することもできます。 CompletableFuture

CompletableFuture は Future の拡張機能であり、より豊富な機能を提供します。これにより、非同期計算の作成、例外の処理、コールバック関数の使用が可能になります。

実際的なケース

Future

を使用してファイルを非同期的にロードする次の例を考えてみましょう:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class FileLoader {

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        Future<String> future = executorService.submit(() -> {
            // 异步加载文件
            return loadFile("file.txt");
        });

        // 继续执行其他任务,而不阻塞当前线程
        // ...

        // 当需要结果时,再阻塞主线程获取结果
        String result = future.get();
    }

    private static String loadFile(String filePath) {
        // 模拟文件加载操作
        return "File contents";
    }
}
ログイン後にコピー
この例では、 ExecutorService

を使用してスレッド プールを作成し、

submit() を使用してファイルのロードを担当する非同期タスクを送信します。メインスレッドは、ファイルがロードされるまでの待機をブロックすることなく、他のタスクを実行し続けます。最後に、ファイルのコンテンツが必要な場合は、get() を呼び出して Future から結果を取得します。 CompletableFuture の使用

次の例は、CompletableFuture

を使用して非同期計算を作成する方法を示しています。

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {

    public static void main(String[] args) {
        // 定义第一个异步计算
        CompletableFuture<Integer> firstResult = CompletableFuture.supplyAsync(() -> {
            // 计算第一个结果
            return 5;
        });

        // 定义第二个异步计算
        CompletableFuture<Integer> secondResult = CompletableFuture.supplyAsync(() -> {
            // 计算第二个结果
            return 10;
        });

        // 组合两个计算,将它们的结果相加
        CompletableFuture<Integer> combinedResult = firstResult.thenCombine(secondResult, (x, y) -> x + y);

        // 获取最终结果
        int result = combinedResult.get();
    }
}
ログイン後にコピー
この例では、 CompletableFuture#supplyAsync()

を使用して 2 つの非同期計算を作成します。次に、

CompletableFuture#thenCombine() を使用してそれらを結合し、その結果を追加します。最後に、CompletableFuture#get() を使用して最終結果を取得します。 つまり、Future と CompletableFuture は、非同期操作と同時タスクを処理するための強力なツールです。これらのツールを使用してアプリケーションのパフォーマンスと応答性を向上させ、より効率的でスケーラブルなコードを作成します。

以上がJava 関数の同時実行性とマルチスレッドで Future と CompletableFuture を使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!