Java-CAS与AtomicInteger

什么是CAS?

CAS就是Compare and Swap的意思,比较并操作。很多的cpu直接支持CAS指令。CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败, 失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。

CAS有3个操作数

V:内存中的值。

B:要修改为的新值。

A:若V==A则V=B。

其实CAS的过程也是挺简单的,来一发流程图吧。

 

AtomicInteger的实现

实际上是通过Unsafe 进行的操作,而Unsafe下面会调用native的方法进行CAS操作。

 

compareAndSwapInt的参数var1就是AtomicInteger对象,var2是内存中的地址,var4是A,var5是B。

优点

不使用同步方法会节约cpu的使用,效率会很高,而且也不会造成死锁。

乐观锁实际上是一种协商锁吧,就是大家根据一个规则来进行锁操作,如果都能按照规矩来做,那么效率是很好的。

打赏