相信大家对线程锁分类已经有所了解,其中就有悲观锁和乐观锁。在悲观锁定中,当用户打开数据进行更新时,会授予锁定。其他用户只能查看数据,直到数据更新的整个事务完成。
在乐观锁定中,打开一个数据以供多个用户更新。仅在更新事务期间而不是整个会话期间授予锁定。由于这种并发性增加并且是更新数据的实用方法。
乐观锁的概念:
乐观锁:指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。
冲突比较少的时候, 使用乐观锁(没有悲观锁那样耗时的开销) 由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。
悲观锁的概念:
悲观锁:指的是在操作数据的时候比较悲观,悲观地认为别人一定会同时修改数据,因此悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。
冲突比较多的时候, 使用悲观锁(没有乐观锁那么多次的尝试)对于每一次数据修改都要上锁,如果在DB读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在DB写大于读的情况。
读取频繁使用乐观锁,写入频繁使用悲观锁。
悲观锁定:
更新数据时,记录被锁定,其他人无法访问该记录进行更新。它成为只读记录,直到锁被释放。一旦锁定被释放,记录可以再次被锁定并为不同的用户更新。
乐观锁定:
这允许多个用户打开相同的记录进行更新。只有在更新记录时,记录才会被锁定。这是 Web 应用程序最优选的锁定方式。
本站中多线程教程中还有更多的相关知识等着大家去学习,这是掌握多线程线程锁种类的必学内容,为我们后面学习多线程的更多内容打下坚实的基础。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习