您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

Java-CAS的使用和描述 {企业网站源码}

  • 时间:2022-07-08 02:11 编辑: 来源: 阅读:269
  • 扫一扫,手机访问
摘要:Java-CAS的使用和描述 {企业网站源码}
Cascompare and swap,意思是比较和交换,是用java中的Unsafe类实现的。常见的CAS实现包括AtomicInteger、AtomicLong、AtomicReference等。,都是用乐观锁的形式来实现多线程编程。 下面以AtomicInteger为例进行详细说明:1 .原子整数的使用公共静态void main(string[]args){ atomic integer atomic integer = new atomic integer();int I = atomic integer . incrementandget();system . out . println(I);}2.通过源代码分析构造AtomicInteger时,默认创建一个不安全的对象,这是实现CAS的关键。 Value表示对象中字段的偏移量,以便可以通过偏移量直接索引字段值。 公共类AtomicInteger扩展Number实现Java . io . serializable { private static final long serial version uid = 6214790243416807050 l;//安装程序使用Unsafe.compareAndSwapInt进行更新private static final Unsafe Unsafe = Unsafe . get Unsafe();私有静态最终长值偏移量;static { try { value offset = unsafe . objectfield offset(atomic integer . class . getdeclaredfield(" value "));} catch(Exception ex){ throw new Error(ex);} }私有volatile int值;..}incrementAndGet方法public final int incrementAndGet(){ return unsafe . getandaddint(this,valueoffset,1)+1;}在执行incrementAndGet时,getAndAddInt将始终执行-while。var1和var2找到对象字段的位置,不断升级var5得到当前值。var5+var4将作为升级值,重复升级直到升级成功。 public final int getAndAddInt(Object var 1,long var2,int var 4){ int var 5;do { var 5 = this . getint volatile(var 1,var 2);} while(!this.compareAndSwapInt(var1,var2,var5,var 5+var 4));返回var5}最后一个原生方法compareandswapintpublic最后一个原生布尔compareandswapint (objectvar1,longvar2,intvar4,int var 5);3.引用AtomicInteger自行操作不安全类导入sun . misc . Unsafe;导入Java . lang . reflect . field;public class unsafestest { public static void main(String[]args)抛出异常{ Unsafe Unsafe = get Unsafe();long offset = unsafe . objectfield offset(entry . class . getdeclaredfield(" id "));system . out . println(" offset:"+offset);Entry entry =新条目();entry . setid(1);boolean b = unsafe . compareandswapint(entry,offset,1,2);system . out . println(b);system . out . println(entry . getid());}/* * *通过反射获取不安全实例*/public static unsafe get unsafe()抛出IllegalAccess异常,NosuchFieldException { field field field = Unsafe . class . getdeclaredfield(" the Unsafe ");field . set accessible(true);return(Unsafe)field . get(null);}公共静态类条目{ private int idpublic int getId(){ return id;} public void setId(int id){ this . id = id;} }}


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部