乐观锁和悲观锁的理解
乐观锁:乐观的预计,认为冲突的概率很低!过程为: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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!