多用户同时操作一条Mysql记录问题
场景:两个用户同时读取了数据库中的一条记录,此时用户A对其中一个字段的值进行了修改操作并进行了提交,后来用户B也对这个字段进行了修改,用户B的提交将会覆盖用户A提交的值
关于乐观锁和悲观锁
悲观锁:每次去取数据,很悲观,都觉得会被别人修改,所以在拿数据的时候都会上锁。
简言之,共享资源每次都只给一个线程使用,其他线程阻塞,等第一个线程用完后再把资源转让给其他线程。
synchronized和ReentranLock等都是悲观锁思想的体现。
乐观锁:每次去取数据,都很乐观,觉得不会被被人修改。
因此每次都不上锁,但是在更新的时候,就会看别人有没有在这期间去更新这个数据,如果有更新就重新获取,再进行判断,一直循环,直到拿到没有被修改过的数据。
CAS(Compare and Swap 比较并交换)就是乐观锁的一种实现方式。
参考
Mysql 事务及数据的一致性处理
https://segmentfault.com/a/1190000012469586
CAS乐观锁解决并发问题的一次实践
https://www.javazhiyin.com/41189.html
相关推荐
houdaxiami 2019-11-17
tangjianft 2019-11-08
IdiotXue 2014-07-17
王道革 2020-07-05
onlypersevere 2020-06-28
sunysh00 2020-06-25
ztyzly00 2020-05-12
mbcsdn 2020-02-02
kevincheung 2020-01-05
bluetears 2019-12-26
Henryztong 2019-12-21
applex 2019-12-14
chenjiazhu 2019-12-13
wensonlee 2019-12-04
luanjun 2019-10-21