1. ホーム
  2. java

[解決済み] Volatile Vs Atomic [重複](揮発性対原子)。

2022-04-30 19:45:08

質問

下の行を読みました。

<ブロッククオート

Java volatileキーワードはアトミックという意味ではなく、よくある誤解です。 volatileを宣言した後に ++ 演算はアトミックになります。 を使用して排他的アクセスを保証する必要があります。 synchronized メソッド、またはJavaのブロックを使用します。

を2つのスレッドが攻撃した場合、どうなるのでしょうか? volatile プリミティブ変数を同時に使用できますか?

これは、ロックをかけた人が最初にその値を設定するということでしょうか。そして、その間に他のスレッドが現れ、最初のスレッドが値を変更している間に古い値を読み出した場合、新しいスレッドはその古い値を読み出すのではないでしょうか?

Atomicキーワードとvolatileキーワードの違いは何ですか?

どのように解決するのですか?

の効果は volatile キーワードは、その変数に対する個々の読み取りまたは書き込み操作が、すべてのスレッドからアトミックに見えるようにされることをおおよそ示しています。

しかし、注目すべきは、1回以上の読み取り/書き込みを必要とする操作、例えば i++ と等価である。 i = i + 1 は、1回の読み取りと1回の書き込みを行う -- です。 ない に別のスレッドが書き込むかもしれないので、アトミックになります。 i の間に、読み出しと書き込みを行います。

は、その Atomic のようなクラスは AtomicIntegerAtomicReference のインクリメントを含む、より多様な操作をアトミックに提供します。 AtomicInteger .