乐观锁:
乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性比较低,每次去读取数据的时候都是认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写的时候先读取当前版本号,然后在加锁操作(比较跟上次的版本号是否一样,如果一样则更新),如果失败则要重复读-比较-写的操作。
Java中的乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值版本号是否一样,一样的更新,否则失败。
悲观锁:
悲观锁就是悲观思想,即认为写多,遇到并发写的可能性高,每次去读取数据的时候都认为被人会修改,所以每次在读写数据的时候都会上锁,这样别人想读写这个数据就会堵塞,直到拿到锁。Java中的悲观锁就是synchronized,AQS框架下的锁则是先尝试cas乐观锁去获取,获取不到才会转为悲观锁,如RetreenLock
标签:Java,读取数据,版本号,更新,乐观,悲观 来源: https://www.cnblogs.com/MisMe/p/11151685.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。