-
独占锁synchronized是一项__悲观__技术, 它假设最坏的情况
-
CAS
(1) 全名 Compare and Swap
(2) 是一项__乐观__技术
(3) CAS包含__3个__操作数
1° 需要读写的内存位置V
2° 进行比较的值A
3° 准备写入内存的新值B
(4) 具体操作
当且仅当位置V的值等于A时, CAS才会通过__原子方式__将B写入V的位置, 否则不执行任何操作;
无论V的值是否等于A, 都返回V原有的值
(5) 含义
认为V的值应该是A, 如果是就更新V的值为B; 如果不是就啥也不干并且告诉你本来V的值是多少
(6) 使用示例: 非阻塞的计数器
@ThreadSafe public class CasCounter { private SimulatedCAS value; public int getValue() { return value.get(); } public int increment() { int v; do { v = value.get(); } while (v != value.compareAndSwap(v, v + 1)); return v + 1; } }在increment函数中, 首先会获取内存V处的值, 然后进行CAS操作: 如果获取到的值和v相等说明没有其他线程干扰, 因此可以更改V处的值; 否则就重复while循环
-
CAS的__优点__: 在竞争程度不高时, 性能远远超过锁的方式
CAS的__缺点__: 调用者需要手动决定发生竞争时的策略(重试or回退or放弃)
-
JVM对CAS的支持
(1) __原子变量类__使用了底层的JVM支持为数字类型和引用类型提供了一种高效的CAS操作
(2) java.util.concurrent中的大多数类直接或间接的使用了这些原子变量类
chapter15_原子变量与非阻塞同步机制_2_硬件对并发的支持
最新推荐文章于 2025-11-01 10:03:52 发布
博客介绍了独占锁synchronized是悲观技术,重点讲解了CAS技术。CAS即Compare and Swap,是乐观技术,包含3个操作数,通过原子方式操作。还给出使用示例,分析其优缺点,最后提到JVM对CAS的支持,如原子变量类等。
1307

被折叠的 条评论
为什么被折叠?



