公众号里有篇文章讲悲观锁和乐观锁小白科普:悲观锁和乐观锁,非常通俗易懂,在这里总结下自己的理解。
悲观锁:每次读写的时候讲数据加锁,不让别人访问,直到自己用完后释放。
缺点:是如果持有锁的时间太长,其他用户需要等待很长时间。
乐观锁:加一个版本(version)字段,每次讲版本读出,修改数据的时候对比下版本号是否一样。如果不一样放弃这次操作,重新读取再操作。
缺点:这种方式适合于冲突不多的场景,如果冲突很多,数据争用激烈,会导致不断地尝试,反而降低了性能,尤其是在高并发情况下大家都疯狂争抢,效率会很低。
简单来说悲观锁阻止读取,乐观锁阻止提交。