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

asp 企业网站源码网络推广文案有哪些

asp 企业网站源码,网络推广文案有哪些,网站建设包括哪些费用,网站网页的滚动字幕怎么做如果你了解了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.15wanjia.com/news/4585.html

相关文章:

  • vultr做网站seo营销推广多少钱
  • 网站建设脱颖而出seo搜索优化服务
  • 有没有必要给企业做网站百度指数批量查询
  • 加盟营销型网站制作seo建设者
  • 有什么免费建网站网站百度手机端排名怎么查询
  • 情感视频素材网站加强服务保障满足群众急需ruu7
  • 广州网站建设公司嘉御大数据比较好的培训机构
  • 网站开发 质保金查询seo
  • 郑州网站开发定制谷歌搜索入口365
  • 网站开发技术要求sem培训班学费哪个好
  • 菏泽做网站公司搜索推广代运营
  • 微信公众号开发者中心滕州网站建设优化
  • 家具公司网站源码全网营销系统1700元真实吗
  • 美团初期是怎么建网站北京网络排名优化
  • 做网站可以用什么语言推广接单平台
  • 标志在线设计网站上海怎么做seo推广
  • 网站建设分金手指排名二八链接地址
  • 南京网站开发公司seo顾问多少钱
  • 武汉营销型网站多少钱抖音关键词排名查询工具
  • 福州网站建设外包焊工培训ppt课件
  • wordpress模板文件是哪个文件夹优化关键词的正确方法
  • 绵阳网站维护托管湖南seo网站多少钱
  • 网站正在建设中页面设置长沙网站seo收费
  • tk域名网站多少磁力链接搜索引擎2021
  • wordpress手机模板插件搜索引擎优化网站
  • 网站建设论文的部首微信小程序建站
  • 现在c 做网站用什么软件泰安网络推广培训
  • 搭建网站赚钱游戏代理怎么找渠道
  • 英文美食网站怎么做橘子seo历史查询
  • 公司提供平台seo网站推广首页排名