Java锁
美团-不可不说的Java“锁”事
一、大厂面试题复盘
二、乐观锁和悲观锁
①:悲观锁
②:乐观锁
三、通过8种锁情况演示锁运行案例,看看我们到底锁的是什么
1.锁相关的8种案例演示code
2.synchronized有三种应用方式
3.从字节码角度分析synchronized实现
四、公平锁和非公平锁
1.何为公平锁/非公平锁?
2.面试题:为什么会有公平锁/非公平锁的设计?为什么默认非公平。
3.面试题:什么时候用公平锁?什么时候用非公平锁?
五、可重入锁(又名递归锁)
①:"可重入锁"这四个字分开来解释
②:可重入锁种类
六、死锁和排查
1.死锁是什么
2.如何排查死锁
七、synchronized与锁升级
1.synchronized锁种类及升级步骤
①:升级流程
②:无锁
③:偏向锁
是什么
主要作用
@Data
@AllArgsConstructor
@NoArgsConstructor
class Ticket{//资源类,模拟3个售票员卖完50张票
Object lockObject=new Object();
private int number=50;
public void sale(){
synchronized (lockObject){
if (number>0){
System.out.println(Thread.currentThread().getName()+" 卖出第:"+(number--)+" 还剩下:"+number);
}
}
}
}
public class SaleTicketDemo {
public static void main(String[] args) {
Ticket ticket=new Ticket();
new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"a").start();
new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"b").start();
new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"c").start();
}
}
偏向锁的持有
偏向锁JVM命令
偏向锁的撤销
④:轻量级锁
是什么
主要作用
64位标记图
轻量级锁获取
code演示
自旋达到一定次数和程度
轻量锁和偏向锁的区别与不同
⑤:重锁
⑥:小总结
锁升级发生后,hashcode去哪啦
各种锁优缺点、synchronized锁升级和实现原理
2.JIT编译器多锁的优化
锁消除
锁粗化