developS

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

乐观锁和悲观锁的理解

乐观锁:乐观的预计,认为冲突的概率很低!过程为:1.修改共享资源 2.验证是否发生冲突 3.若无其他线程修改,完成 4.若存在其他线程修改,放弃本次操作

悲观锁:悲观的预计,认为冲突的频率很高,很容易出现冲突,访问之前需要先上锁,每一时间内只有一个线程访问到共享资源

常见的乐观锁: CAS(compare and swap),比较并交换

原理:当前值V   期望值E  更新值U 当E = V的时候会才能将V变成 U

例如 AtomicInteger 原子类 

    public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }
//本地native方法实现
public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
//获取当前的内存旧值 为期望值
var5 = this.getIntVolatile(var1, var2);
//var5+var4为更新值
//var5与内存中的值比较 是否相等,相等则更新为var5+var4
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));

return var5;
}

  

posted on   四十四次日落95  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示