CAS操作(以AtomicInteger为例):
Public final int getAndIncrement(){
for(;;){
int current = get();
int next = current + 1;
if(compareAndSet(current,next))
return current;
}
}
Public final boolean compareAndSet(int expect,int update){
return unsafe.compareAndSwapInt(this,valueoffset,expect,update);
}
int a = 1;
t1.start()->a+1=2
t2.start()->a+1=2
这种情况下,如果正常运行则会得出a = 2的结果,显然是错误的,通过CAS之后,t1运行到currnt=get(),得出a=1,当运行到compareAndSet()时,如果中间t2运行了,此时会发现a=2,与current不一致,所以不会进行+1操作,再次循环,current = 2,然后得出a=3,即可保证所有操作的原子运行。