プロフィール DavidHLPL · RHINE LAB RSS ↗
資料 X-1097 / バックエンド工学

Java 並行処理の深掘り:JUC、CAS、アトミック、ロックとスレッド機構

技術ノート

公開 / DavidHLPL

Fuwari の 15 の JUC/Java ノートは本知識ベースで最も体系的な並行シリーズであり、CAS、アトミック、synchronized、Monitor、ReentrantLock、ThreadLocal、LockSupport、デッドロック、参照型をカバーします。本ページは CAS を核につなぎます。

核心メカニズム

  • CAS:CASDeepDive.md は Unsafe.compareAndSwap から cmpxchg までの 3 層を展開し、ABA は AtomicStampedReference で解決します。
  • アトミック:JavaAtomicClasses.md は AtomicInteger/Long/Reference と LongAdder(ストライプ集計、LongAdderVSAtomicLong.md 参照)を区別します。
  • ロック:synchronized/Monitor.md はオブジェクトヘッダとモニタを、ReentrantLock.md/Reentrancy.md は再入可能性と AQS を、LockSupport.md は park/unpark をカバーします。
  • 協調:CompletableFutureAction/FutureTaskAction と ThreadLocal.md は非同期とスレッド束縛を、JavaInterruptMechanism とデッドロック診断は割り込みとトラブルシューティングをカバーします。
  • 参照:JDK8/17 の 2 つの記事は強参照・ソフト参照・弱参照・ファントム参照の回収意味をカバーします。

適用条件

  • 小さなロックフリーの臨界区間やカウンタには CAS/アトミックを;複雑な臨界区間には明示的ロックを。
  • 高競合のカウンタには LongAdder、低競合には AtomicLong。

不適用とリスク

  • 高競合下の CAS スピンは CPU を無駄にします;ABA はバージョンスタンプが必要です。
  • ThreadLocal はプールされたスレッドでのリークを避けるため速やかに remove する必要があります。
  • 参照の意味は GC 実装(G1/ZGC)や JDK バージョンによって変わります。

最小検証

  1. 2 つのスレッドで同時に compareAndSet し、1 つの成功だけを検証。
  2. 競合下で LongAdder と AtomicLong を比較。
  3. スレッドプールで ThreadLocal の set/remove リークをチェック。

証拠と不確実性

  • 出典事実:ingest-java-concurrency は 40KB の CAS 深掘りを含む 15 の出典ノートを含む。
  • 本ページの統合:散在する章を CAS—ロック—協調に収束。
  • 未確認:Unsafe は JDK17 以降で段階的に制限されており、VarHandle への置換は出典で検証されていない。

関連ページ

出典と関連文書

研究記録

  1. 元の文書: src/content/note/ja/java-concurrency-deepdive.md
  2. 出典リビジョン: f49953fb0d4bd52a39bf81167b0c4b7dd7d78a64
  3. 証拠の状態: 有効

原文の出典 ↗