1. 减库存 一般下单减库存的流程大概是这样的: 1、查询商品库存。这里直接查的Redis中的库存。 2、Redis中的库存减1。这里用到的Redis命令是:incrby -1 3、扣减数据库中的库存。这里用数据库乐观锁,不用额外加锁 4、异步刷新Redis中的库存 5、定时扫描超时未支付的交易,库 ...
分类:
其他好文 时间:
2020-03-09 21:18:04
阅读次数:
85
总结: 1、保证可见性(JMM) 2、不保证原子性 (核心难点:原子类) 3、禁止指令重排 (核心难点:说出单例模式。说出CAS。说出CPU原语) 1 // 验证volatile 可见性 2 public class JmmDemo { 3 private volatile static int n ...
分类:
其他好文 时间:
2020-03-09 18:14:01
阅读次数:
65
看题目: 第一种解法采用绝对悲观锁保证绝对的线程安全,思路很简单:不考虑线程协作写代码,然后找出单线程环境下存在控制依赖与数据依赖且涉及共享变量的部分,保证其原子性后确定互斥关系,决定那些操作是互斥的,则共用一把锁。 class H2O { int hNums=0; int oNums=0; pub ...
分类:
其他好文 时间:
2020-03-09 01:24:01
阅读次数:
65
1、CAS是什么 CAS就是compareAndSwap的缩写即我们所说的比较交换。cas是一种基于锁的操作。而且是乐观锁。 先看一个代码 结果 true current data is 2019 false current data is 2019 再看图 大致理解:主物理内存是5,t1和t2线程 ...
分类:
其他好文 时间:
2020-03-08 19:55:31
阅读次数:
58
转自 https://www.cnblogs.com/hustzzl/p/9343797.html 1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,在此做一个总结。介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...
分类:
编程语言 时间:
2020-03-06 12:52:14
阅读次数:
76
乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。 ...
分类:
其他好文 时间:
2020-03-02 22:36:07
阅读次数:
64
事务隔离级别 四个级别, 只会?用到读已提交和可重复读这两个 mysql默认为可重复读 更建议使?用 不会加间隙锁(影响并发) 索引没触发, 不会锁表, 只是锁行 不可重复和幻读问题, ?般不需要管, 如果有强?致性要求, 加悲观锁/乐观锁 事务隔离级别指的是在处理同一个数据的多个事务中,一个事务修 ...
分类:
其他好文 时间:
2020-02-29 18:51:56
阅读次数:
70
1、悲观锁: 执行操作前假设当前的操作肯定(或有很大几率)会被打断(悲观)。基于这个假设,我们在做操作前就会把相关资源锁定,不允许自己执行期间有其他操作干扰。Redis不支持悲观锁。Redis 作为缓存服务器使用时,以操作为主,很少写操作,相应的操作被打断的几率较少。不采用悲观锁是为了防止降低性能。 ...
分类:
其他好文 时间:
2020-02-24 18:34:24
阅读次数:
120
整个的体系图 悲观锁,乐观锁 是一个广义概念;体现的是看待线程同步的不同角度。 悲观锁 认为在自己使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不被别的线程修改。 实现:关键字synchronized,接口Lock的实现类 适用场景:写操作多,先加锁可以保证写操作时的数据 ...
分类:
编程语言 时间:
2020-02-20 22:14:44
阅读次数:
64
引言 这部分内容详解线程的同步与互斥,解决线程同步与互斥的主要方式是 CAS、synchronized 和 lock。 CAS 与 ABA 问题 什么是 CAS ? CAS 是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现都是基于 CAS 的,用于解决线程的同步与互斥。解决线程同步 ...
分类:
编程语言 时间:
2020-02-18 13:21:40
阅读次数:
100