4.20. 構造化並列性 (プレビュー)


Red Hat build of OpenJDK 21 では、構造化並列性が導入されています。これは、異なるスレッドで実行されている関連タスクのグループを 1 つの作業単位として扱うために API を提供するプレビュー機能です。この API は並行プログラミングを簡素化し、エラー処理と取り消しを効率化し、読みやすさを向上させ、監視性を強化します。

構造化並列性パラダイムでは、タスク (つまり、スレッド) をサブタスクに分割でき、サブタスクをさらにサブタスクにネストすることもできます。このタイプのタスク階層により、取り消しの伝播 (つまり、タスクを取り消すと、そのサブタスクも自動的に取り消される) と、タスク間の相互作用をより適切に制御できるようになります。

以下に例を示します。

Response handle() throws ExecutionException, InterruptedException {
	try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
    	Supplier<String>  user  = scope.fork(() -> findUser());
    	Supplier<Integer> order = scope.fork(() -> fetchOrder());

    	scope.join()        	// Join both subtasks
         	.throwIfFailed();  // ... and propagate errors

    	// Here, both subtasks have succeeded, so compose their results
    	return new Response(user.get(), order.get());
	}
}
Copy to Clipboard

上記の例では、最初にスコープを作成し、次にこのスコープをフォークしてサブタスクを作成します。いつでも、元のスレッドまたはいずれかのサブタスクからスコープのシャットダウンを要求して、未完了のタスクをすべてキャンセルし、新しいサブタスクが作成されないようにすることができます。scope.join() メソッドは、スコープがすべてのサブタスクの実行が完了するまで待機させます。.get() メソッドは各サブタスクの結果を返します。

各サブタスクは、独自の StructuredTaskScope を作成して、ワークロードをさらにサブタスクに分割することもできます。この場合、追加のサブタスクは、全体の階層内で親サブタスクの下にネストされます。

詳細は、JEP 453: Structured Concurrency (Preview) を参照してください。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat