CAS采用乐观锁思维,是一种非阻塞原子性操作,保证了比较-更新的原子性。
1.CAS三个构成
内存值
旧的预期值
新的预期值
当多线程使用CAS访问共享资源时,只有一个能成功。当旧预期值和新预期值相等时才能修改成功,失败的线程可以尝试自旋或者什么都不做。
以AtomicInteger为例,分析自增方法getAndAdd();
public final int getAndAdd(int delta) {return unsafe.getAndAddInt(this, valueOffset, delta);}
进入unsafe查看getAndAdd方法的具体实现
// val1 为内存地址 var2 为旧值 var4 为自增的数值public final int getAndAddInt(Object var1, long var2, int var4) {int var5;do {// 从val1地址上获取新的值给val5var5 = this.getIntVolatile(var1, var2);// 如果旧值和新值一样,则var1内存中的值更新为val4+val5,否则更新值为val1内存的值} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));return var5;}
PHP网站源码廊坊网站建设排名优化青岛网站优化词被降权网站怎么优化上城区网站优化推广平台网站优化软件技术专业平顶山百度网站优化费用低企业网站如何做好优化云阳网站排名优化和田网站推广优化古冶靠谱的网站优化有哪些百度推广优化网站企业网站优化方案范文开平网站优化哪家好晋州网站优化外包公司番禺网站关键字优化网站优化加盟企业网站优化推广工具网站优化外链网站的优化认准火18星妙手长春百长春网站设计度优化网站建设优化服务报价百度优化网站如何做做360优化网站都有哪家广州seo网站推广优化常德专业营销型网站优化登封网站建设优化推广网站关键词优化教学视频网站设计网络推广优化海口网站优化排名平台青岛手机网站优化哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运