JavaにおけるConcurrentHashMapの内部構造とスレッドセーフ実装
日常的な開発では、HashMapが広く使われていますが、そのデータ構造は配列+単方向連結リスト(JDK 1.8以降では、チェーン長が8を超えると赤黒木に変換)です。しかし、マルチスレッド環境下ではHashMapはスレッドセーフではなく、明示的な同期処理が必要です。
代わりにjava.util.Hashtableは同期化されたメソッドによりスレッドセーフを保証しますが、全体ロックによる ...
7月4日 21:58 投稿
Java 並行処理における LongAdder の内部構造と性能優位性
高並下におけるカウント処理の課題
JDK 1.8 において導入された LongAdder クラスは、マルチスレッド環境下でのカウンター処理を最適化するために設計された原子操作クラスです。従来の AtomicLong は CAS(Compare-And-Swap)命令を用いて非阻塞な原子性を実現しており、ロックベースの同期機構と比較して高性能ですが、極端に競合が激しいシーンでは性能低下が課題となり ...
6月14日 18:48 投稿
ブロッキングキューの仕組みと実装
生産者・消費者パターン
生産者と消費者は設計パターンの一つであり、このパターンでは両者が直接通信せず、共通のコンテナ(例:キュー)を介してやりとりを行うことによって、強結合を回避する。
生産者はデータを生成し、それをコンテナに投入するだけで、消費側の処理完了を待つ必要がない。
一方で、消費者はコンテナからデータを取り出すのみで、生産者と直接連携す ...
6月13日 17:23 投稿
ConcurrentHashMapのaddCountメソッドの動作解析
ConcurrentHashMapの内部処理の中で、要素数を管理するaddCountメソッドは非常に重要な役割を果たします。本稿では、このメソッドがどのように動作するのか、コードを交えて詳しく解説します。このメソッドは主にputValメソッドから呼び出されます。
ソースコードの動作分析
private final void addCount(long x, int check) {
CounterCell[] as;
long b, s;
...
5月23日 23:16 投稿