1.CAS,比较并交换,(乐观锁的一种技术,.Java的非阻塞算法)
2. 内存位置的值(V)、预期原值(A)和新值(B)。
a.内存位置的值与预期原值相匹配,处理器会将该位置值更新为新值 。否则,处理器不做任何操作。
b.它都会在 CAS 指令之前返回该位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。”
3.目的:使用CAS就可以不用加锁来实现线程安全。
4.缺点:a.ABA问题。ABA问题的解决思路就是使用版本号
b.循环时间长开销大。自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销.
c.只能保证一个共享变量的原子操作
5.锁机制保证了只有获得锁的线程才能够操作锁定的内存区域。有偏向锁、轻量级锁和互斥锁。有意思的是除了偏向锁,JVM实现锁的方式都用了循环CAS,即当一个线程想进入同步块的时候使用循环CAS的方式来获取锁,当它退出同步块的时候使用循环CAS释放锁。