问题场景描述

一般都是先读数据库某个数,判断是否满足要求,然后更新这个数据,在分布式高并发的情况下,就容易出现脏读的问题。要解决的话,有以下可以尝试的方法

  1. java同步关键字synchronized

    可以锁方法也可以锁对象,不过不适合分布式环境,刚开始学完java比较容易想到的办法

  2. 利用数据库的特性

    利用数据库行级锁,读锁,不过互联网的应用,这种方法就不推荐了

  3. 利用事务

    这个对事务的大小,以及执行速度都有要求,如果事务足够小,执行的足够快的话,也是一种解决办法

  4. 先更新,后取数

    比如:你想取得商品ID列表返回,这时候你应该先更新库存,在返回ID列表,并且更新库存的where条件应该是库存大于0,这样如果更新语句影响记录等于1,说明有足够库存,更新成功,否则库存不足。目前项目中用的这种方法

总结:

    以上几点,是我们在项目中解决并发问题的思路历程,以后随着用户量的增加可能会出现新的问题,那么解决方法可能也会更新。