Java中的乐观锁和悲观锁

悲观锁:每次拿数据和写数据都认为别人会进行修改(具备强烈的独占和排他性)git

           依赖数据库的锁机制实现,以保证操做最大程度的独占性。github

缺点:数据库性能的大量开销,特别是对长事务而言,这样的开销没法承受           算法

乐观锁:每次拿数据都认为别人不会修改,只有写数据才认为别人会进行修改,乐观锁不能解决脏读问题数据库

            乐观锁大多都基于数据版本(version)记录机制实现,何谓数据版本?即为数据增长一个版本标识,在基于数据库表的版本解决方案中,通常是经过为数据表增长一个“version”字段来实现。读取出数据时,将此版本一同读出,以后更新时,对此版本后+1.此时,将提交的版本数据与数据库表对应记录的当前版本信息对比时,若是提交的数据版本号大于数据库当前版本号,则予以更新,不然认为是过时数据            ide

乐观锁通常采用版本机制和CAS算法(会致使aba问题);用于读多写少

悲观锁通常是synchronized和ReentrantLock独占锁,行锁,表锁,读锁和写锁;用于读少写多

乐观锁和悲观锁性能

相关文章
相关标签/搜索