これらの概念を正しく理解していることを確認したいと思います。説明/確認は私を大いに助けてくれますし、他の多くのプログラマーも確信しています。したがって、これらの概念についての私の理解は、私の調査から得られたものです。
Volatile は、複数のスレッド間で変数を共有する場合に使用されます。a) (スレッド間で共有される) 変数を volatile と宣言しないことの違いは何ですか? b) 異なるスレッドからアクセスしている場合、常に volatile と宣言する必要がありますか? c) volatile 変数を同期することは理にかなっていますか?
AtomicReference は、オブジェクトをラップし、いくつかのアトミック操作 (compareAndSet、lazySet、weakCompareAndSet) を提供するクラスです。これですべてです。同期も何もありません。a) AtomicReference volatile を宣言するのは理にかなっていますか? b) AtomicReference.get は同期もセットもされていないため、同期しますか?
同期は、複数のスレッド間で共有される変数への順次アクセスを意味する概念です。インスタンスごと、クラスごとに行うことができます。同期は、メソッド ヘッダーまたはコード ブロックに追加できます。ここにミステリーはありません:)
よろしく、アウレリアン