Java并发机制底层实现原理
锁的膨胀过程 预备知识CAS 硬件对并发的支持 在大多数处理器架构(包括IA32和Sparc)中采用的方法是实现一个比较并交换(CAS)指令,CAS包含了3个操作数——内存位置(V),预期原值(A),拟写入的新值(B),当且仅当V == A 时,CAS才会通过原子方式用新值(B)来更新(V)原有的值,无论操作成功与否,都会返回(V)值,且整个过程都是不可打断的,所以CAS是一个原子操作;主要是利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法。 模拟CAS操作 public class SimpleCAS { private Integer value; private synchronized int get(){ return value; } private synchronized int compareAndSwap(int a, int b){ int v = value; return v == a ? b : v; } class CasCounter{ private SimpleCAS simpleCAS; private Integer getValue(){ return simpleCAS.get(); } private Integer increment(){ Integer v; do { v = simpleCAS.get(); }