ホームページ >Java >&#&チュートリアル >Java 仮想スレッドをマスターする: アプリケーションのスケーラビリティとパフォーマンスを向上させる

Java 仮想スレッドをマスターする: アプリケーションのスケーラビリティとパフォーマンスを向上させる

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-25 02:05:10259ブラウズ

Mastering Java Virtual Threads: Boost Application Scalability and Performance

Amazon の本を読んだり、Medium でフォローしてさらに詳しい情報を入手してください!ご支援をよろしくお願いいたします!

Java 仮想スレッド (JVT) は Java の同時プログラミングに革命をもたらし、アプリケーションのスケーラビリティを劇的に向上させました。 私の経験では、それらがさまざまなアプリケーションにわたって変革的な影響を及ぼしていることがわかります。

JVT は、データベース操作などの I/O バウンドのタスクの処理に優れています。 従来のモデルでは、多くの場合、ブロッキングが発生し、同時実行が制限されます。 JVT はこの問題をエレガントに克服し、システム リソースを過剰に消費することなく、数千の同時データベース クエリを効率的に管理できるようにします。次の例を考えてみましょう:

<code class="language-java">try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    List<CompletableFuture<Result>> futures = new ArrayList<>();
    for (int i = 0; i < 10000; i++) {
        futures.add(CompletableFuture.supplyAsync(() -> performDatabaseQuery(i), executor));
    }
    List<Result> results = futures.stream()
        .map(CompletableFuture::join)
        .collect(Collectors.toList());
}

private Result performDatabaseQuery(int id) {
    // Simulates a database query with network latency
    try {
        Thread.sleep(100); 
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    return new Result(id, "Data for " + id);
}</code>

このコードは、それぞれ別の仮想スレッドで 10,000 のクエリを同時に実行し、多数の同時操作の効率的な管理を示しています。

同様に、JVT は HTTP クライアント リクエストで威力を発揮します。 最新のアプリケーションは、複数の外部サービスと頻繁に対話します。 JVT は多数の同時接続を効率的に処理します:

<code class="language-java">HttpClient client = HttpClient.newHttpClient();

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    List<CompletableFuture<String>> futures = new ArrayList<>();
    for (int i = 0; i < 1000; i++) {
        futures.add(CompletableFuture.supplyAsync(() -> fetchData("https://api.example.com/data/" + i), executor));
    }
    List<String> results = futures.stream()
        .map(CompletableFuture::join)
        .collect(Collectors.toList());
}

private String fetchData(String url) {
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(url))
        .build();
    try {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    } catch (IOException | InterruptedException e) {
        Thread.currentThread().interrupt();
        return "Error fetching data";
    }
}</code>

ここでは、1,000 の同時 HTTP リクエストが効率的に管理され、スループットが向上します。

バッチ処理、マイクロサービス、イベント駆動型アーキテクチャも、JVT の軽量な性質と効率的なコンテキスト切り替えから大きな恩恵を受け、パフォーマンスとスケーラビリティの向上につながります。 原文で提供されている例は、これらの利点を効果的に示しています。

JVT には大きな利点がありますが、普遍的なソリューションではありません。 CPU に依存するタスクでは劇的な改善が見られない可能性があります。 JVT を最適に利用するには、アプリケーションのワークロードを理解することが重要です。 潜在的な落とし穴には、スレッドローカル変数の過剰使用や過剰な同期が含まれます。これらについては、実装時に慎重に考慮する必要があります。

要約すると、Java 仮想スレッドは同時プログラミングにおける大きな進歩を表し、簡略化された同期スタイルのコードで拡張性の高いアプリケーションを可能にします。 I/O バウンド操作を効率的に処理するため、次世代の高パフォーマンス Java アプリケーションを構築するための強力なツールとなります。


101 冊

著者の Aarav Joshi が共同設立した

101 Books は、AI を活用して高品質の書籍を手頃な価格で提供しています。 Amazon で「Golang Clean Code」をチェックし、Aarav Joshi を検索して他のタイトルを探索してください。 特別割引もございます!

私たちの作品

他のプロジェクトもご覧ください: インベスター セントラル (英語、スペイン語、ドイツ語)、スマート リビング、エポックズ & エコーズ、パズル ミステリー、ヒンドゥットヴァ、エリート開発者、JS スクール。


私たちは中程度です

Medium で当社を見つけてください: Tech Koala Insights、Epochs & Echoes World、Investor Central Medium、Puzzling Mysteries Medium、Science & Epochs Medium、Modern Hindutva。

以上がJava 仮想スレッドをマスターする: アプリケーションのスケーラビリティとパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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