CAS
CAS(Compare And Swap)
CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前返回该位置的值。CAS有效地说明了“我认为位置V应该包含值A;如果包含该值,则将B放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。
在JAVA中,
sun.misc.Unsafe
类提供了硬件级别的原子操作来实现这个CAS。java.util.concurrent
包下的大量类都使用了这个Unsafe.java
类的CAS操作。至于Unsafe.java
的具体实现这里就不讨论了。
CAS典型应用
java.util.concurrent.atomic
包下的类大多是使用CAS操作来实现的(eg.AtomicInteger.java
,AtomicBoolean
,AtomicLong
)。
Last updated
Was this helpful?