私はいくつかのマルチスレッドコードでこれらの2つに出くわし、2つの間に違いがあるかどうか疑問に思いました。
SynchronizedBooleanではなくAtomicBooleanを使用すると、パフォーマンスに大きな違いが生じるということですか?
そして、それは計算の正確さに影響しますか?
私はいくつかのマルチスレッドコードでこれらの2つに出くわし、2つの間に違いがあるかどうか疑問に思いました。
SynchronizedBooleanではなくAtomicBooleanを使用すると、パフォーマンスに大きな違いが生じるということですか?
そして、それは計算の正確さに影響しますか?
AtomicBooleanは、標準のJava並行パッケージの一部です。 SynchronizedBooleanは、Doug Lea(Java並行パッケージの多くの作成者)によって作成された一連のユーティリティの一部です。パフォーマンスに関しては、AtomicBooleanのパフォーマンスが向上することを期待する必要があります。これは揮発性ブール値を使用しますが、SynchronizedBooleanはReadWriteLockを使用します。
ただし、実際には、ほとんどのアプリケーションで大きな違いに気付くことはありません。
本当の違い(そしてあなたの選択を導くべきもの)は、2つのクラスが提供するセマンティクスにあります。AtomicBooleanは、単純なset / get/compareAndSet操作を提供します。SynchronizedBooleanは、アトミックブール演算を提供し、その値のコンテキスト内でRunnablesを実行できるように内部ロックを公開します。
Doug Leaは、このソースをコミュニティに無料で提供しています。SynchronizedBoolean、WaitableBooleanの拡張機能は、特定の状態変化が発生するたびにロック内でRunnableを実行できるため、特に便利です。