Java中的Volatile和Atomic,为什么我们需要Atomic工具包



Volatile消除了可见性和排序问题。而原子工具包则提供操作的原子性。Volatile使用happens-before关系,而Atomic使用比较和交换。

为什么需要引入新的抽象层,比如原子工具包,而不是增强volatile关键字本身?是否存在可以由原子工具包解决的特定情况?

实际上,如果你仔细观察Atomic*的实现,你会发现它们都持有volatile字段的值。

IMHO原子已经是volatile机制的一种扩展,为原子CAS操作提供了方便的方法。

隐藏CAS实现也有好处。例如hotspot jvm大量使用intrinsic来实现压缩性能。

更改现有的语言结构(如volatile)很可能意味着破坏现有的应用程序。因此,这通常不是一种选择,特别是对于Java语言。创建新库不会影响现有的应用程序,因此完全向后兼容。

除此之外,atomic包中的类还提供了像compareAndSet这样的高级操作,这些操作不能直接添加到volatile关键字中。

相关内容

最新更新