chapter15_原子变量与非阻塞同步机制_2_硬件对并发的支持
2019-03-19 15:54
471 查看
-
独占锁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_原子变量与非阻塞同步机制_4_非阻塞算法
- chapter15_原子变量与非阻塞同步机制_3_原子变量类
- 读书笔记:Java并发实战第15章 原子变量与非阻塞同步机制
- 并发编程实战学习笔记(十一)-原子变量与非阻塞同步机制
- Java并发读书学习笔记(十一)——原子变量与非阻塞同步机制
- 并发编程11.原子变量与非阻塞同步机制
- JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
- 第15章 原子变量与非阻塞同步机制
- 《java并发编程实战》 第十五章 原子变量与非阻塞同步机制
- 《Java并发编程实战》---性能与可伸缩性---原子变量与非阻塞同步机制
- 并发编程学习笔记之原子变量与非阻塞同步机制(十二)
- 并发编程 21—— 原子变量和非阻塞同步机制
- 原子变量与非阻塞同步机制(第十五章)
- Java并发:原子变量和非阻塞同步机制
- 《Java并发编程实战》第十五章 原子变量与非阻塞同步机制 读书笔记
- 多线程并发编程之原子变量与非阻塞同步机制
- 《JAVA并发编程实战》 - 原子变量与非阻塞同步机制
- [Java Concurrency in Practice]第十五章 原子变量与非阻塞同步机制
- 并发编程学习笔记之原子变量与非阻塞同步机制(十二)
- java并发编程实践学习(15)原子变量与非阻塞同步机制