これら2つの違いがわかりません:
AtomicReference<Integer> atomicReference = new AtomicReference<>(1);
対。
AtomicInteger atomicInteger = new AtomicInteger(1);
AtomicReference をいつ使うべきか、誰かが一般的に言うことができますか? 誰かが私を助けてくれることを願っています。ありがとう。
これら2つの違いがわかりません:
AtomicReference<Integer> atomicReference = new AtomicReference<>(1);
対。
AtomicInteger atomicInteger = new AtomicInteger(1);
AtomicReference をいつ使うべきか、誰かが一般的に言うことができますか? 誰かが私を助けてくれることを願っています。ありがとう。
非常に重要な違いは、メソッドcompareAndSet
とのweakCompareAndSet
セマンティクスが のセマンティクスと異なるAtomicReference<Integer>
ことですAtomicInteger
。これはAtomicReference<Integer>
、これらのメソッド==
が比較に使用され、2 つのInteger
オブジェクトが でなくても等しくなる可能性があるため==
です。ではAtomicInteger
、比較は整数値の等価性であり、参照同一性ではありません。
他の人が指摘したように、AtomicInteger
には では利用できない追加機能がありますAtomicReference<Integer>
。また、AtomicInteger
extendsであるため、すべてのメソッド (など) をNumber
継承し、 aが期待されるときはいつでも使用できます。Number
doubleValue()
Number
set(...)
andget()
だけを使用している場合は大きな違いはありませんが、整数に対してのみ機能AtomicInteger
するなどの他の方法があります。incrementAndGet()
AtomicReference
ラップ a volatile Object
whileAtomicInteger
ラップa をラップするため、volatile int
インクリメント、デクリメント、およびメソッドの追加を含む整数固有のメソッドを実行できます。 AtomicInteger
も拡張します。これは、、 などのメソッドNumber
をサポートすることを意味します。doubleValue()
longValue()
AtomicReference
任意の型を参照できるジェネリック クラスです。
独自のクラスのインスタンスをアトミックに使用する場合は、AtomicReference<V>
.
AtomicInteger
整数を含む特殊なバージョンです。より効率的で (不要なボクシングがない)、 のような便利なメソッドがありincrementAndGet()
ます。