2011-07-12 4 views
5

オブジェクト内のintフィールドへのアトミックなアクセスが必要な場合は、フィールドをAtomicIntegerとして宣言するだけで十分ですか、AtomicIntegerFieldUpdaterを使用する必要がありますか? (理由は?)java - オブジェクト内のフィールドへのアトミックアクセス

+0

アトミックアクセスを定義します。アトミックにする操作の順序は何ですか? – biziclop

+0

複数のスレッドがフィールドを増減します。 – lgp

答えて

6

AtomicIntegerを使用すれば十分です。原子updatersはvolatileフィールドで使用します。プライマリユースケースは、原子アクセスを必要とする多数のフィールドを持つデータ構造です。フィールド・アップデーターを使用して、フィールドごとにAtomicIntegerリファレンスを持たずに、アトミック・セマンティクスを持つフィールドを使用します。

詳細な説明は、this linkを参照してください。 biziclopさんのコメントに加えて

1

AtomicIntegerであり、友人は通常は十分であるべきであり、反射などのハッカーを伴わないので一般的に好ましい。

AtomicIntegerFieldUpdaterは、オブジェクトの合計数を減らすため、同じものを更新する必要のあるインスタンスが多い場合に役立ちます。ストレートな読み書き以外の操作がまれである場合は、特に便利です。例えば、AtomicReferenceFieldUpdaterは、attachメソッドではjava.nioで使用されます。これは一般に1回(get-and-setとして公開)設定され、何度も読み込まれます。

関連する問題