Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JJUGナイトセミナー「Java 26 リリース記念イベント」 - JEP525
Search
raedion
March 24, 2026
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JJUGナイトセミナー「Java 26 リリース記念イベント」 - JEP525
raedion
March 24, 2026
More Decks by raedion
See All by raedion
生成AIを活用したリファクタリング実践 ~コードスメルをなくすためのアプローチ
raedion
1
3.8k
オープンソースKeycloakのハンズオンで理解する認証と認可の基本
raedion
0
580
Featured
See All Featured
BBQ
matthewcrist
89
10k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Building an army of robots
kneath
306
46k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
660
RailsConf 2023
tenderlove
30
1.5k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
630
Six Lessons from altMBA
skipperchong
29
4.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
Transcript
JEP 525: Structured Concurrency (Sixth Preview) — Java 26 JJUG
ナイトセミナー 2026/03/24 Kanta Koto
自己紹介 名前: 古藤 寛大(Kanta Koto ) 所属: 株式会社野村総合研究所 普段の仕事: OSS
サポート業務(ex. Keycloak 、WildFly 、Spring 関連など) Twitter/X: @kotkanri 2
Structured Concurrency の概要 Structured Concurrency (構造化並行処理) の API 異なるスレッドで実行される関連タスク群を 1
つの作業単位 として扱う スレッド間の関係性が明確になるよう、ソースコード上で「構造化」している サブタスクのライフサイクルが親のコードブロックのスコープ範囲に制限できる ため、スレッドリークやキャンセル漏れを構造的に防げる 大量に生成されるVirtualThread をトレースしやすい メリット:エラーハンドリング・キャンセルがシンプルに java.util.concurrent.StructuredTaskScope 3
従来の方法だと、スレッドリーク・キャンセル漏れのリスクがある Response handle() throws ExecutionException, InterruptedException { Future<String> user =
executor.submit(() -> findUser()); Future<Integer> order = executor.submit(() -> fetchOrder()); String theUser = user.get(); // fetchOrder失敗時もブロック int theOrder = order.get(); return new Response(theUser, theOrder); } タスク同士の関係がコード上で保障されておらず、片方が処理に失敗してももう片方が動 き続けたり待ち続ける → スレッドリーク ExecutorService の cancel メソッドを使う手段もあるが、実装が煩雑になりがち 4
Structured Concurrency を利用すると、構造的にタスクの安全性を担 保できる Response handle() throws InterruptedException { try
(var scope = StructuredTaskScope.open()) { Subtask<String> user = scope.fork(() -> findUser()); Subtask<Integer> order = scope.fork(() -> fetchOrder()); scope.join(); return new Response(user.get(), order.get()); } } 5
具体的には以下のような処理の仕組みとなっている Response handle() throws InterruptedException { // 関連タスクが実行される範囲をコードブロックで明確に定義 try (var
scope = StructuredTaskScope.open()) { // 1つ目のサブタスクを実行 Subtask<String> user = scope.fork(() -> findUser()); // 2つ目のサブタスクを実行 Subtask<Integer> order = scope.fork(() -> fetchOrder()); // 全サブタスク完了まで待機 scope.join(); // 両方成功 → 結果を合成 return new Response(user.get(), order.get()); } // スコープ終了時、全サブタスクの終了が保証される } 処理フロー: open() → fork() → join() → 結果取得 → close() 6
Structured Concurrency のこれまでのリリース履歴 JDK JEP ステータス 19 428 Incubator (1st)
20 437 Incubator (2nd) 21 453 Preview (1st) — fork() が Subtask を返すように 22 462 Preview (2nd) — 変更なし 23 480 Preview (3rd) — 変更なし 24 499 Preview (4th) — open() ファクトリメソッド、 Joiner API 25 505 Preview (5th) — 設定API 改良 26 525 Preview (6th) ← 今回 7
JDK25 (JEP505 )からJDK26 (JEP525 )の変更点 変更内容 JEP 505 (5th) JEP
525 (6th) Joiner にタイムアウトハンドリング なし onTimeout() メソッド追加 全成功時の結果型 Stream<Subtask<T>> List<T> 任意1 つ成功のメソッド名 anySuccessfulResultOrThrow() anySuccessfulOrThrow() open() の設定パラメータ Function UnaryOperator 8
( 付録) コンパイル・実行方法 # javac + java javac --release 26
--enable-preview Main.java java --enable-preview Main # ソースコードランチャー(単一ファイル) java --enable-preview Main.java # jshell で試す jshell --enable-preview --enable-preview が必須(プレビューAPI のため) 9
まとめ JEP 525 = Structured Concurrency の 6 回目のプレビュー (Java
26) JEP 505 からの変更は マイナーだが実用的な改善 onTimeout() / List 戻り値 / メソッドリネーム / UnaryOperator 正式化は間近 — 今のうちに API を触っておこう --enable-preview で 今日から試せる 押さえておくべきこと open() → fork() → join() → close() の処理フロー Virtual Threads との組み合わせが鍵 10