目录
1. 悲观锁 / 乐观锁
悲观锁:synchronized、lock
适合场景:写操作多 ---狼性锁
乐观锁:CAS算法,java原子类中的递增操作就通过CAS自旋实现的。
适合场景:读操作多 ---佛系锁
2. 锁运行后的8种情况:
synchronized
monitorenter指令
……
monitorexit指令
重要面试题:为什么任何一个对象都可以成为一个synchronized锁?
HotSpot ObjectMonitor.java
3. 公平锁 / 非公平锁
公平锁 fair
非公平锁 unfair
卖票Demo:3个售票员卖50张票
Q:为什么会有公平锁/非公平锁的设计?为什么默认非公平?
4. 可重入锁(递归锁)
隐式锁 synchronized
显式锁 Lock
lock()和unlock() 要一一配对
5. 死锁
1)是什么
2)产生原因
3)如何排查死锁?
纯命令、图形化
>jps -l
pid
>jstack [进程编号]
Found 1 deadlock
cmd 输入 jconsole