[Modern Backend] 講座 Part 1 第6回の第1講義、「スコープ値(Scoped Values)(1)」です。
今回の講義では、Java 25で正式機能として採用されたスコープ値(Scoped Value)の登場背景と必要性、そしてこれまでコンテキスト共有に慣れ親しんで使ってきたThreadLocalが抱える構造的な限界と危険性について、深く掘り下げます。
📌 主な学習内容:
-
階層間で共通データ(認証、トレースIDなど)を受け渡す3つの方式の比較(パラメータ渡し/静的ホルダー/スコープ値)
-
ThreadLocalMapの内部構造と、メモリリーク/情報漏えい事故の原因分析
-
ThreadLocalの3つの限界(可変性 Mutability、ライフタイム管理 Lifetime、継承コスト Inheritance)
-
前回の第5講のコード分析を通じた、コンテキストを手動で受け渡す(set/clear)コードの不安定性の検証
-
仮想スレッド(Virtual Thread)の時代において、ThreadLocalの再利用を前提とすることが破綻する理由
-
InheritableThreadLocal vs ScopedValue(重いマップのコピー vs 軽量な参照共有と不変性の保証)
開発者の注意だけに依存していた従来の方式から脱却し、言語レベルでデータの有効範囲を安全に強制するScoped Valueの設計背景を、順を追って確認してみましょう。