[解決済み】Volatile booleanとAtomicBooleanの比較
質問
AtomicBooleanは、volatile booleanでは実現できない、どのようなことをするのですか?
どのように解決するのですか?
全く違うだけなのです。この例で考えてみましょう。
volatile
の整数になります。
volatile int i = 0;
void incIBy5() {
i += 5;
}
2つのスレッドが同時に関数を呼び出す場合。
i
というのは、コンパイルされたコードはこれと多少似ているからです。
int
):
void incIBy5() {
int temp;
synchronized(i) { temp = i }
synchronized(i) { i = temp + 5 }
}
変数がvolatileの場合、その変数へのアトミックなアクセスはすべて同期化されますが、実際に何がアトミックなアクセスに該当するかは必ずしも明らかではありません。しかし
Atomic*
オブジェクトの場合、すべてのメソッドがアトミックであることが保証されています。
したがって、もし
AtomicInteger
と
getAndAdd(int delta)
になることは間違いありません。
10
. 同じように、2つのスレッドがともに
boolean
変数が同時に
AtomicBoolean
を使用すると、後で元の値を持っていることを確認することができます。
volatile boolean
しかし、それはできません。
そのため 複数のスレッド フィールドを変更する場合は、アトミックにするか、明示的な同期を使用する必要があります。
の目的は
volatile
は別のものです。この例を考えてみましょう。
volatile boolean stop = false;
void loop() {
while (!stop) { ... }
}
void stop() { stop = true; }
スレッドが実行されている場合
loop()
を呼び出すスレッドと
stop()
を省略した場合、無限ループに陥る可能性があります。
volatile
最初のスレッドがstopの値をキャッシュしているかもしれないからです。ここでは
volatile
は、コンパイラに最適化をもう少し慎重に行うようにというヒントを与えているのです。
関連
-
[解決済み] argparseによるブーリアン値のパース
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み] Pythonで文字列からbooleanに変換する?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
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でAtomicBooleanを使用する必要があるのはどんなときですか?
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み】atomic / volatile / synchronizedの違いは何ですか?
-
[解決済み】JavaにおけるVolatileとStaticの比較