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

chrome谷歌浏览器百度seo最成功的优化

chrome谷歌浏览器,百度seo最成功的优化,微信电影网站怎么做的,建站公司塔山双喜如果你了解了AtomicInteger的工作原理,或者看了如下文章,知道了AtomicInteger只能对当个int类型共享变量做cas的缺点。 CAS之AtomicInteger原理解析_z275598733的博客-CSDN博客 那么AtomicReference就是来解决这个问题的。原理很类似,只是A…

如果你了解了AtomicInteger的工作原理,或者看了如下文章,知道了AtomicInteger只能对当个int类型共享变量做cas的缺点。

CAS之AtomicInteger原理解析_z275598733的博客-CSDN博客

那么AtomicReference就是来解决这个问题的。原理很类似,只是AtomicReference是对对象做cas操作。从一段AtomicReference类的方法调用代码开始来对源码做分析

public class Test {public static void main(String[] args) {A a1 = new A(0, 0l);A a2 = new A(1, 1l);AtomicReference<A> ar = new AtomicReference<>(a1);ar.getAndSet(a2);System.out.println(ar.get().toString());//打印对象ai的内存结构,需要引入jol-core工具包ClassLayout classLayout = ClassLayout.parseInstance(ar);System.out.println(classLayout.toPrintable());}
}@Getter
@Setter
@AllArgsConstructor
@ToString
class A{private int v1;private double v2;
}

从 new AtomicReference<>(a1)进入先看静态代码块和构造方法,再看 ar.getAndSet(a2) 做了什么。

public class AtomicReference<V> implements java.io.Serializable {...static {try {valueOffset = unsafe.objectFieldOffset(AtomicReference.class.getDeclaredField("value"));} catch (Exception ex) { throw new Error(ex); }}//与AtomicInterger类基本一致,只不过类型由int变成了泛型Vprivate volatile V value;public AtomicReference(V initialValue) {value = initialValue;}//与对象public final boolean compareAndSet(V expect, V update) {//this-当前AtomicReference对象;valueoffest-相对AtomicReference的内存偏移量;expectreturn unsafe.compareAndSwapObject(this, valueOffset, expect, update);}//具体实现,需要进入到Unsafe类中public final V getAndSet(V newValue) {this-当前AtomicReference对象;valueoffest-相对this对象的内存偏移量;newValue-新对象return (V)unsafe.getAndSetObject(this, valueOffset, newValue);}...
}

 进入到Unsafe.getAndSetObject方法中

public final class Unsafe {...public final Object getAndSetObject(Object var1, long var2, Object var4) {Object var5;do {//通过对象中value相对偏移量获取内存中的value对象,这里var5对其他线程是可见的, 如果不可见,那么这个值的获取就可能非内存真实值。与Unsafe.getAndAddInt异曲同工var5 = this.getObjectVolatile(var1, var2);//compareAndSwapObject的过程是原子性的,将重新获取到的内存对象value与var5比较,true则说明对象value并未被修改,可以将原对象改成var4。区别于Unsafe.compareAndSwapInt, 这里比较对象} while(!this.compareAndSwapObject(var1, var2, var5, var4));return var5;}//native方法,暂不深究public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);...
}

 以下是debug的信息

 AtomicReference类对象ar的内存结构

 总而言之,AtomicReference可以保证对象的修改是线程安全的,AtomicReference对比AtomicInteger 可以在共享对象内部维护多个共享变量,但是ABA问题依然没有解决。

http://www.dinnco.com/news/66718.html

相关文章:

  • 如何把电脑改成服务器做网站广州seo排名优化
  • 重庆酉阳网站设计公司seo优化在哪里学
  • 自己怎么在网上做网站培训网站模板
  • 建设网站模板免费百度主页
  • 如何申请注册企业邮箱山西seo基础教程
  • 网站关键字多少个吉林百度seo公司
  • 宁波网站设计首选荣盛网络广州网站优化软件
  • 西安做网站哪家好青岛百度整站优化服务
  • 如何免费做网络推广重庆seo杨洋
  • 做游戏ppt下载网站宣传软文是什么意思
  • 一站式服务平台入口关键词优化如何做
  • 网站顶端flash镇江网页设计
  • 网页设计网站模板素材百度教育
  • 网站集群建设价格英文外链代发
  • 网站制作哪个好一些如何在网上推广自己的公司
  • 公众号如何推广南宁seo标准
  • 做网站卖什么产品利润高推广软文200字
  • 建设网站一般过程深圳市网络营销推广服务公司
  • 网站开发流程 原型设计百度蜘蛛池自动收录seo
  • 石家庄电商网站开发目前推广软件
  • king wordpress信阳seo公司
  • 镇雄县城乡建设局网站aso是什么意思
  • 网站排名顾问关键词难易度分析
  • html常用标签及属性深圳搜索引擎优化收费
  • 泰兴做网站的公司百度网页版 入口
  • 什么网站专做宠物物品seo技术培训泰州
  • 基于微信公众号开发网站开发网站优化名词解释
  • 企业做网站的坏处求职seo服务
  • 南京高端网站建设工作室seo建站收费地震
  • wp网站做企业站好不好北京百度推广电话号码