Java数据库中,乐观锁和悲观锁哪种更常用?

2026-05-24 12:090阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2259个文字,预计阅读时间需要10分钟。

Java数据库中,乐观锁和悲观锁哪种更常用?

在写入数据库时需要加锁,以防同时写入数据导致数据丢失。例如,同时写入数据库时可能会出现数据丢失,那么就需要锁机制。数据锁分为乐观锁和悲观锁,它们适用的场景如下:

1. 乐观锁适用于写入数据较少、读多写少的场景。

  在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。

  数据锁分为乐观锁和悲观锁,那么它们使用的场景如下:

  1. 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。

  2. 悲观锁适用于写多读少的情景,这种情况也相当于JAVA的synchronized,reentrantLock等,大量数据过来的时候,只有一条数据可以被写入,其他的数据需要等待。执行完成后下一条数据可以继续。

  他们实现的方式上有所不同,乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功,比如 update table set column = value where version=${version} and otherKey = ${otherKey}。悲观锁实现的机制一般是在执行更新语句的时候采用for update方式,比如 update table set column='value' for update。这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。

  下面我就弄一个spring boot(springboot 2.1.1 + mysql + lombok + aop + jpa)工程,然后逐渐的实现乐观锁和悲观锁。

阅读全文

本文共计2259个文字,预计阅读时间需要10分钟。

Java数据库中,乐观锁和悲观锁哪种更常用?

在写入数据库时需要加锁,以防同时写入数据导致数据丢失。例如,同时写入数据库时可能会出现数据丢失,那么就需要锁机制。数据锁分为乐观锁和悲观锁,它们适用的场景如下:

1. 乐观锁适用于写入数据较少、读多写少的场景。

  在写入数据库的时候需要有锁,比如同时写入数据库的时候会出现丢数据,那么就需要锁机制。

  数据锁分为乐观锁和悲观锁,那么它们使用的场景如下:

  1. 乐观锁适用于写少读多的情景,因为这种乐观锁相当于JAVA的CAS,所以多条数据同时过来的时候,不用等待,可以立即进行返回。

  2. 悲观锁适用于写多读少的情景,这种情况也相当于JAVA的synchronized,reentrantLock等,大量数据过来的时候,只有一条数据可以被写入,其他的数据需要等待。执行完成后下一条数据可以继续。

  他们实现的方式上有所不同,乐观锁采用版本号的方式,即当前版本号如果对应上了就可以写入数据,如果判断当前版本号不一致,那么就不会更新成功,比如 update table set column = value where version=${version} and otherKey = ${otherKey}。悲观锁实现的机制一般是在执行更新语句的时候采用for update方式,比如 update table set column='value' for update。这种情况where条件呢一定要涉及到数据库对应的索引字段,这样才会是行级锁,否则会是表锁,这样执行速度会变慢。

  下面我就弄一个spring boot(springboot 2.1.1 + mysql + lombok + aop + jpa)工程,然后逐渐的实现乐观锁和悲观锁。

阅读全文