java CAS锁 AtomicInteger源码解析

所有的CAS操作都在atomic包下面

下面简单的介绍关于Integer不同的类,在atomic包下面有三个类

1:AtomicInteger类

 

 

 我标了几个重点介绍的

构造器:两个构造器,如果传递值,赋值到value字段上。

 

value值是一个volatile修饰的,也就是一个线程修改其他线程都可以看到修改之后的值。

objectFieldOffset是一个native修饰的,底层的代码看不见。

valueOffset 个人比较喜欢叫做 对象字段偏移量,记录当前对象字段的值,方便查询value的数据。

 

 

 

 

 

 get、set、longValue、floatValue、doubleValue 等简单的方法,一看就懂了,这里面不做解释。

 

这个方法是unsafe的方法,object是Atomic对象,var2是一个valueOffset 偏移量 var4 要增加的数据。

getIntVolatile方法是一个native修饰的,通过var1和var2获取内存当中的数据,通过compareAndSwapInt进行操作,

如果成功则内存的值替换成了var5+var4,如果不成功就一直的循环,直到成功,返回增加完之后的值。

 

 

 

 

AtomicInteger这个类当中好多方法都是调用getAndAddInt或者是compareAndSwapInt。

 

 

 

 

 

 

posted @ 2020-02-29 16:43  陌然浅笑  阅读(112)  评论(0)    收藏  举报