#Java多线程——CAS #
CAS(compare and swap) 涉及使用cpu 指令(不同架构不一致,与cpu硬件指令有关)保证操作的原子性。unsafe可以直接操作内存地址。 java.util.concurrent.atomic包下的采用cas保证操作的原子性。
主要3个操作数,当前值:A,内存值:V ,期望值:B。
if (A == C){ // 当前值 与内存值相等
C = B ; // 内存值修改为 B
}else{
//放弃更新 ,什么都不做
}
CAS特点:
1)优点:采用CPU指令,属于无锁操作,多线程可以操作共享资源。
2)缺点:存在ABA问题,AtomicStampedReference类解决了ABA,除了比较内存值,增加了版本比较。