資料 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 バージョンによって変わります。
最小検証
- 2 つのスレッドで同時に
compareAndSetし、1 つの成功だけを検証。 - 競合下で
LongAdderとAtomicLongを比較。 - スレッドプールで
ThreadLocalのset/removeリークをチェック。
証拠と不確実性
- 出典事実:
ingest-java-concurrencyは 40KB の CAS 深掘りを含む 15 の出典ノートを含む。 - 本ページの統合:散在する章を CAS—ロック—協調に収束。
- 未確認:
Unsafeは JDK17 以降で段階的に制限されており、VarHandleへの置換は出典で検証されていない。
関連ページ
出典と関連文書
研究記録
- 元の文書: src/content/note/ja/java-concurrency-deepdive.md
- 出典リビジョン: f49953fb0d4bd52a39bf81167b0c4b7dd7d78a64
- 証拠の状態: 有効