乐观锁
乐观锁认为一般不会出现并发问题,在获取和处理数据的时候都不加锁,只有在执行写入操作时才去检查数据是否已经被修改过。
实现
版本号机制
在数据库表中增加一个version字段,在更新时检查version是否没有被修改过。
锁的粒度较细,性能较好,但是存在成功率低的问题。
UPDATE user SET name = value, version = version + 1
WHERE id = #{id} AND version = #{oldVersion};悲观锁
悲观锁认为并发问题总是存在,因此从获取数据前就开始加锁,直到数据处理写入完成才进行释放锁。
实现较为简单,但是由于锁的粒度较粗,因此性能较差。
实现
synchronized 关键字