[解決済み】AtomicIntegerの実用的な使い方
2022-04-16 23:32:10
質問
AtomicIntegerなどのAtomic変数が同時アクセスを許可していることはなんとなく理解しています。このクラスは一般的にどのような場合に使用されるのでしょうか?
どのように解決するのですか?
の主な用途は2つあります。
AtomicInteger
:
-
アトミックカウンターとして(
incrementAndGet()
多くのスレッドで同時に使用することができます。 -
をサポートするプリミティブとして コンペア・アンド・スワップ 命令 (
compareAndSet()
) を用いて、ノンブロッキングアルゴリズムを実装しています。以下はノンブロッキング乱数生成器の例です。 Brian Göetz著『Java Concurrency In Practice(Java並行処理の実践)』。 :
public class AtomicPseudoRandom extends PseudoRandom { private AtomicInteger seed; AtomicPseudoRandom(int seed) { this.seed = new AtomicInteger(seed); } public int nextInt(int n) { while (true) { int s = seed.get(); int nextSeed = calculateNext(s); if (seed.compareAndSet(s, nextSeed)) { int remainder = s % n; return remainder > 0 ? remainder : remainder + n; } } } ... }
ご覧の通り、基本的には
incrementAndGet()
を行うが、任意の計算を行う(calculateNext()
)の代わりにインクリメントを行う(そして結果をリターン前に処理する)。
関連
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】atomic / volatile / synchronizedの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] 文字列が一意な文字であるかどうかを判定する
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] init-paramとcontext-param
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み] .lengthが解決できない、またはフィールドでない