我最近在java.util.concurrent.atomic包中遇到了原子类。据我所知,不可变类在默认情况下本质上是线程安全的,因此我们不需要同步它们。后来我才知道包装器类(例如Integer,Boolean,Character等)本质上是不可变的,所以为什么我们需要Atomic *类(例如AtomicInteger或AtomicLong)。另外,请解释什么是AtomicReference。
原子类是可变的,但在修改方面具有很强的内存一致性保证。因此,它们与不变的包装器类有不同的用途。
这些Atomic*类的真正优势在于,它们公开了原子比较和交换方法,这对于实现无锁算法非常有用。
Atomic*
像许多中级到高级并发工具一样,如果您无法想象为什么会需要这样的东西,那么您可能不应该尝试使用它们。如果您坚持到处都是不变性或显式锁定,那么您可能将不需要原子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
点击生成二维码
我来说两句