CAS原理:
CAS(compare and swap)是java.util.concurrent并发的包中用的很多,是这个包的核心,因为它不通过JVM,可以直接利用JNI调用CPU 的cmpxchg(汇编指令),不用经历内核态阻塞这一过程,利用JNI来完成Java的非阻塞算法,实现原子操作。CAS中有三个操作数,内存值v,原预期值a和即将修改的预期值b,若果内存值v与a值相匹配,那么将b值修改到内存值v,反之保持原v值。CAS可以说是个乐观锁技术,若果有多个线程同时操作一个共享变量时,只有其中一个线程可以修改,其他的线程都将失败,进行下一次竞争尝试
synchronized:
在jdk6后对synchronized进行了优化,也是从减少通过内核态操作,来提高性能,底层实现主要依靠Lock-Free队列,类似CAS方式,提高吞吐量,分非公平性锁,线程较少时跟CAS性能差不多,在线程冲突比较大的情况下性能比CAS要高很多。
ReentrantLock:
ReentrantLock的实现也是利用对CAS进行循环调用来实现加锁,性能好,可以避免线程进入内核态的阻塞状态,它是在jdk1.5之后提出的API层面的互斥锁。利用lock()和unlock()结合try/finally实现