[解決済み】プログラミングにおける「atomic」の意味とは?
2022-03-28 11:34:53
質問
Effective Javaの本には、次のように書かれています。
言語仕様では の型でない限り、アトミックです。
long
またはdouble
[JLS, 17.4.7].
Javaプログラミング、あるいは一般的なプログラミングの文脈で、quot;atomic"とはどのような意味でしょうか?
どのように解決するのですか?
ここで例を挙げてみましょう。仮に
foo
は、変数型
long
であれば、次の操作はアトミック操作ではない(
Javaでは
):
foo = 65465498L;
最初の32ビットを書き込む処理と、最後の32ビットを書き込む処理の2つである。つまり、他のスレッドが
foo
で、その中間状態を見ることができます。
操作をアトミックにすることは、他のどのスレッドからも、その操作が単一のアトミックな(つまり分割できない)操作として見えるようにするために、同期メカニズムを使用することです。つまり、他のどのスレッドからも、いったん操作がアトミックになると
foo
代入前、または代入後。しかし、決してその中間値ではありません。
これを実現する簡単な方法として 変数が揮発する :
private volatile long foo;
あるいは、変数へのアクセスごとに同期をとること。
public synchronized void setFoo(long value) {
this.foo = value;
}
public synchronized long getFoo() {
return this.foo;
}
// no other use of foo outside of these two methods, unless also synchronized
に置き換えることもできます。
AtomicLong
:
private AtomicLong foo;
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] init-paramとcontext-param
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] x--やx++はここで何をするのですか?
-
[解決済み] javaのsynchronizedキーワードのC#版?