背景
一条数据不能同时被两个或者多个线程修改。保证数据的有效性。比如下订单后,扣库存数量就需要这样的保证。
过程
-
数据库中数据
-
测试方法1:testForUpdate1
分析:代码在if判断处,打上断点。 -
测试方式2:testForUpdate2
-
测试过程描述
先跑测试方法1,一直卡在断点处。这个时候直接执行测试方法2。 -
测试结果
-
测试结果分析
由于测试方法1先把id为27的数据上锁。测试方法2能够读到数据,但是不能修改id为27的数据。
小结
记录对一个小知识的理解过程。select for update。 这是一个悲观锁。它解决了什么问题呢?并发问题。那还有其他方式解决吗?可以使用乐观锁的方式。如果是集群或者分布式环境,也可以尝试使用分布式锁来解决并发问题。