これら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>。また、AtomicIntegerextendsであるため、すべてのメソッド (など) をNumber継承し、 aが期待されるときはいつでも使用できます。NumberdoubleValue()Number
set(...)andget()だけを使用している場合は大きな違いはありませんが、整数に対してのみ機能AtomicIntegerするなどの他の方法があります。incrementAndGet()
AtomicReferenceラップ a volatile ObjectwhileAtomicIntegerラップa をラップするため、volatile intインクリメント、デクリメント、およびメソッドの追加を含む整数固有のメソッドを実行できます。 AtomicIntegerも拡張します。これは、、 などのメソッドNumberをサポートすることを意味します。doubleValue()longValue()
AtomicReference任意の型を参照できるジェネリック クラスです。
独自のクラスのインスタンスをアトミックに使用する場合は、AtomicReference<V>.
AtomicInteger整数を含む特殊なバージョンです。より効率的で (不要なボクシングがない)、 のような便利なメソッドがありincrementAndGet()ます。