摘要: 分布式锁的定义 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁 前面sychronized锁失效的原因是 原本,由于每一个JVM都有一个独立的锁监视器,用于监视当前JVM中的sychronized锁,所以无法保障多个集群下只有一个线程访问一个代码块。 所以直接将使用一个分布锁,在整个系统 阅读全文
posted @ 2025-04-10 17:26 kuki' 阅读(24) 评论(0) 推荐(0)
摘要: 单体解决一人一单的问题 如上图,两个JVM,多个锁监视器。有问题 出现的问题 两者都进入了锁的内部,这个synchronized锁形同虚设, 这是由于synchronized是本地锁,只能提供线程级别的同步,每个JVM中都有一把synchronized锁,不能跨 JVM 进行上锁, 当一个线程进入被 阅读全文
posted @ 2025-04-10 16:26 kuki' 阅读(13) 评论(0) 推荐(0)
摘要: 1 基础版逻辑图 2 上图存在的问题 问题原因:出现这个问题的原因和前面库存为负数数的情况是一样的。 线程1查询当前用户是否有订单,当前用户没有订单准备下单, 此时线程2也查询当前用户是否有订单,由于线程1还没有完成下单操作,线程2同样发现当前用户未下单,也准备下单, 这样明明一个用户只能下一单,结 阅读全文
posted @ 2025-04-10 16:21 kuki' 阅读(45) 评论(0) 推荐(0)
摘要: 版本号法 为 tb_seckill_voucher 表新增一个版本号字段 version 线程1查询完库存,在进行库存扣减操作的同时将版本号+1, 线程2在查询库存时,同时查询出当前的版本号, 发现库存充足,也准备执行库存扣减操作,但是需要判断当前的版本号是否是之前查询时的版本号, 结果发现版本号发 阅读全文
posted @ 2025-04-10 15:33 kuki' 阅读(44) 评论(0) 推荐(0)
摘要: 定义 CAS(Compare and Swap)是一种并发编程中常用的原子操作,用于解决多线程环境下的数据竞争问题。 它是乐观锁算法的一种实现方式。 CAS操作包含三个参数: 内存地址V、 旧的预期值A和 新的值B。 CAS的执行 CAS的执行过程如下: 比较(Compare):将内存地址V中的值与 阅读全文
posted @ 2025-04-10 14:33 kuki' 阅读(41) 评论(0) 推荐(0)
摘要: 常见方案 悲观锁, 认为线程安全问题一定会发生, 因此操作数据库之前都需要先获取锁,确保线程串行执行。 常见的悲观锁有:synchronized、lock 乐观锁, 认为线程安全问题不一定发生, 因此不加锁, 只会在更新数据库的时候去判断有没有其它线程对数据进行修改, 如果没有修改则认为是安全的,直 阅读全文
posted @ 2025-04-10 12:56 kuki' 阅读(49) 评论(0) 推荐(0)
摘要: 不考虑超卖问题的实现 查询优惠券 判断时间是否符合 判断库存够么 都对,则库存-1 创建订单保存到数据库 1. 高并发的场景下,单体下库存超卖问题 1.1 问题描述 线程1查询库存,发现库存充足,创建订单,然后准备对库存进行扣减, 但此时线程2和线程3也进行查询,同样发现库存充足, 然后线程1执行完 阅读全文
posted @ 2025-04-10 00:54 kuki' 阅读(54) 评论(0) 推荐(0)