悲观锁:数据库
开始在执行前就会认为数据可能出现竞争,直接加锁,它是依靠数据库的锁来实现,可是缺点也很明显:并发
若是悲观锁加锁的时间过长,其余用户就会没法访问,大大下降了程序的并发性能,由于依靠数据库的锁来实现,因此数据库的开销也会比较大。因此有了乐观锁的实现性能
乐观锁:io
相对于悲观锁来讲,乐观锁会认为数据开始不会发生竞争,只有在数据进行更新提交的时候,才会对数据进行冲突检查,若是冲突了就会返回冲突信息,那么通常是如何实现的,主要有一下两种:程序
1:经过版本号的方式控制时间戳
在查询的时候查询出旧的version,在更新的时候会对旧的version进行加1操做,在数据更新的时候,经过where条件进行判断,版本号是否是和预期的一致,若是不是返回错误,若是是的话直接更新。数据
2:经过其余字段,好比时间戳方式查询
以时间戳的方式,和版本号差很少,不过就是时间戳是实时获取的,更新的时候对于时间戳。时间
可是在乐观锁环境中可能出现用户提交不成功一致提交的过程,也会下降系统的性能错误