定义

  1. 乐观锁:顾名思义,对每次的数据操作都保持乐观的态度,不担心数据会被修改,所以不会对数据进行上锁。由于数据没有上锁,这就存在数据会被多人读写的情况。所以每次修改数据的时候需要对数据进行判断是否被修改过。

  2. 悲观锁:与乐观锁相反,对每次的数据操作都保存悲观的态度,总是担心数据会被修改,所以在自己操作的时候会对数据上锁,防止在自己操作的时候被他人同时操作导致更新丢失。

使用场景

  1. 乐观锁:由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在 DB 的读大于写的业务场景。

  2. 悲观锁:对于每一次数据修改都要上锁,如果在 DB 读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在 DB 写大于读的情况。

实现

  1. 乐观锁:使用版本号或者时间戳。在表中加个 versionupdateTime 字段,在每次更新操作时对此一下该字段,如果一致则更新数据,数据不等则放弃本次修改,根据实际业务需求做相应的处理。

  2. 悲观锁:使用数据库的读锁、写锁、行锁等实现进程的悬挂阻塞等当前操作完成后才能进行下一个操作。

原文链接:
https://blog.csdn.net/shanxiyaofeng/article/details/85100131