web-dev-qa-db-ja.com

Javaで使用されるAtomicLongとは何ですか?

AtomicLongの用途を説明できる人はいますか?たとえば、以下のステートメントの違いは何ですか?

private Long transactionId;
private AtomicLong transactionId;
28
Nilotpal

これら2つのオブジェクトにはsignificantの違いがありますが、最終的な結果は同じですが、間違いなく非常に異なっており、非常に異なる状況。

次の場合に、基本的なLongオブジェクトを使用します。

  • ラッパークラスが必要です
  • コレクションを使用しています
  • プリミティブではなくオブジェクトのみを扱いたい(ちょっとうまくいく)

次の場合にAtomicLongを使用します。

  • 値が並行環境で使用できることを保証する必要があります
  • ラッパークラスは必要ありません(このクラスは自動ボックス化されないため)

Long自体は、2つのスレッドが同じ値を表示および更新できるため、スレッドの相互運用性を許可しませんが、AtomicLongを使用すると、複数のスレッドが表示する値の周りにかなりの保証があります。

事実上、スレッドを操作する必要がない限り、AtomicLongを使用する必要はありません。

33
Makoto