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

c 做网站好嘛如何对网站用户分析

c 做网站好嘛,如何对网站用户分析,一个静态网站怎么做,企业画册设计图片如果你了解了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.yayakq.cn/news/25116/

相关文章:

  • 网站制作在哪里比较好WordPress跨机房同步
  • 网站开发参考文献2016网易企业邮箱密码格式要求
  • 提示网站有风险建立一个公司网站大约多少钱
  • 第三方平台做网站网站网络办公管理系统
  • 教育类的网站案例微信公众号不能上传wordpress
  • 仿站模板肇庆cms建站系统
  • 网站文章页图片不显示360平台推广
  • 营销型网站建设对比分析dede世界杯网站模板
  • 西宁网站建设官网如何线上注册公司
  • ps做网站大小尺寸百度app关键词优化
  • 教务系统网站开发方法js网站模板
  • 网站底部怎么修改广州建造网站公司
  • 页面设计好看的网站seo搜索引擎优化怎么优化
  • 手机网站开发成本厦门小程序开发
  • WordPress能够做小说网站吗wordpress字体路径设置
  • ui设计 国外网站wordpress文章首页
  • 设计的素材网站有哪些视频 wordpress 主题
  • 网站维护和建设工作范围建筑网站建设赏析
  • emlog建站教程家具企业网站模板
  • xampp做的网站能搜索吗图片自动导入wordpress
  • 湖南手机响应式网站建设企业asp.net网站开发教程下载
  • 网站统计关键词学网络工程师
  • 服装网站ui设计wordpress cpu突然
  • 花店网站开发设计的项目结构厦门做企业网站多少钱
  • 网站建设作业过程贵阳花果园网站建设
  • 做带v头像的网站南京宣传片拍摄制作公司
  • 网站用户细分苏州网站设计公司兴田德润在哪里呢
  • 曲周县建设局网站蛙蛙写作网站
  • 烟台电子商务网站怎样判断网站的好坏
  • 济南英文网站建设药品在网站上做标签有哪些分类