原子性:表现为每个可以单独操作,不相互依赖,在线程中表现为每个线程都有他自己的一份值,不定期的刷新到主内存。
1.CAS实现volatile的原子性
volatile只能实现可见性,不能实现原子性。但是可以用CAS操作来实现其原子性。
实现原理:CAS保存了3个值,H为预期值,V为内存值,S为计算值。
代码如下:
public final int casTest() {
for (;;) {
int h=i; //A线程叫AH,B线程描述为BH
int s = i + 1; // A线程叫AS,B线程描述为BS
if(h==i){ // 比较内存值和预期值
i=s; // 如果相同,赋值,成功CAS
break;
}
}
网友评论