乐观锁与悲观锁
nan_kliang 6/4/2022 Java
并发控制中两种常见的策略,用于解决多线程或多用户环境下对共享资源的并发访问问题
# 对比
| 特性 | 乐观锁 | 悲观锁 |
|---|---|---|
| 假设 | 很少发生冲突 | 总是发生冲突 |
| 加锁时机 | 更新时检查 | 访问即加锁 |
| 实现方式 | 版本号、CAS | synchronized,数据库行锁 |
| 性能 | 高并发性能好 | 低并发 |
| 适用场景 | 读多写少,低冲突 | 写多,高冲突 |
| 优点 | 不阻塞读操作,性能好 | 安全性高,能有效避免并发冲突 |
| 缺点 | 如果冲突频繁,会导致更新失败重试,反而影响性能 | 加锁会阻塞其它线程,降低并发性能,可能导致死锁或资源浪费 |