当前位置: 首页 > news >正文

北京人才招聘网站今天的新闻直播间

北京人才招聘网站,今天的新闻直播间,个人 网站建设,上海商业网站建设费用CAS是一种乐观锁机制,一种比较并交换的过程和理念,用来解决线程安全问题,具体来讲就是对共享变量值的安全更新机制。能够保证原子、可见、一致性。这种交换过程是在Unsafe类中实现。 从一段简单的代码开始来对源码做分析 public static void…

CAS是一种乐观锁机制,一种比较并交换的过程和理念,用来解决线程安全问题,具体来讲就是对共享变量值的安全更新机制。能够保证原子、可见、一致性。这种交换过程是在Unsafe类中实现。

从一段简单的代码开始来对源码做分析

    public static void main(String[] args) {AtomicInteger ai = new AtomicInteger(0);ai.getAndAdd(1);System.out.println(ai.get());//打印对象ai的内存结构,需要引入jol-core工具包ClassLayout classLayout = ClassLayout.parseInstance(ai);System.out.println(classLayout.toPrintable());}

从 new AtomicInteger(0) 进入先看构造方法和静态代码块,再看ai.getAndAdd(1)做了什么。

public class AtomicInteger extends Number implements java.io.Serializable {...private static final long valueOffset;static {try {//获取初始值value的内存偏移量,这个偏移量指的是变量相对于对象地址的偏移,通过此偏移可以获取变量在内存中的值,后面还会介绍valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));} catch (Exception ex) { throw new Error(ex); }}//初始化的时候给value赋值public AtomicInteger(int initialValue) {value = initialValue;}//比较并交换的具体实现,需要进入到Unsafe类中public final int getAndAdd(int delta) {//this-当前atomicInter对象;valueoffest-内存偏移量;delta需要增加的值return unsafe.getAndAddInt(this, valueOffset, delta);}
}

 进入到Unsafe.getAndAddInt方法中

 public final class Unsafe {...public final int getAndAddInt(Object var1, long var2, int var4) {int var5;do {//通过AtomicInteger对象和其变量value的偏移量获取内存中的value值,这里var5对其他线程                            是可见的, 如果不可见,那么这个值的获取就可能非内存真实值。如果var5 = this.getIntVolatile(var1, var2);//compareAndSwapInt的过程是原子性的,将重新获取到的内存value值与var5比较,true则说明value的内存值并未被修改,可以将原值var5 + 增值var4。} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));return var5;}
}  

通过断点看具体的值

 再来看偏移量是什么,下面是AtomicInteger类型对象ai的内存结构

java.util.concurrent.atomic.AtomicInteger object internals:OFFSET  SIZE   TYPE DESCRIPTION                               VALUE0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)8     4        (object header)                           bd 3d 00 f8 (10111101 00111101 00000000 11111000) (-134201923)12     4    int AtomicInteger.value                       1
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

请看标红的位置,由于对象的分配是在一个地址段内,对象中变量就是基于对象初始地址作了偏移,这里是对象中value变量相对对象初始地址的位置,其值最终为1。

个人理解,有不对之处,望请指正,谢谢。

http://www.sczhlp.com/news/148827/

相关文章:

  • 网站开发环境搭建网站建设上线问题
  • 服务网站备案aso.net 网站开发
  • 房屋网签查询系统官方网站广西建设网站网址多少
  • 学做衣服上什么网站用ps做网站页面的大小
  • 创建网站的快捷方式考试网站模版
  • 英选 网站开发国内优秀企业网站
  • 温州专业微网站制作报价如皋官方网站建设什么地铁
  • 公司怎么建设网站拼多多网店注册
  • 网站地图怎么样做更利于收录如何通过做网站和公众号盈利
  • 鄞州网站设计网络规划设计师薪资
  • 接网站开发私活如何签合同互联网公司排名咸阳
  • 深圳网站建设推广优化查公司信息的网站
  • 我想做个网站推广怎么做用cms建网站容易吗
  • 网站建设费应计入什么科目交易平台网站模板
  • 有经验的南昌网站建设四川圣泽建设集团有限公司网站
  • 深圳网站制作网站建设怎么制作网站深圳博纳义乌市网站建设代理
  • 自学编程网站外链服务
  • dz门户网站模板开发公司可以顾保安
  • 怎么用视频做网站首页石家庄做网站推广排名的公司
  • 网站开发流程php中小型网站建设资讯
  • 如何在国外做网站大型门户网站建设企业
  • 做购物网站小图标专业网站制作公司塞尼铁克
  • 网站服务运营队伍与渠道建设苏州找工作网站有哪些
  • 房产网站建设产品福建泉州网站建设公司哪家好
  • 个人网站收款水墨风格网站
  • 个人创办网站软件开发外包服务公司
  • 贵阳建站公司模板网站建设心得感想
  • 假发网站是怎么做的漳州网站建设哪家好
  • wordpress搭建子网站东莞保安招聘网
  • 开发的某网站建设公司网站源码网站防护找谁做