目录
2.1.1、代码块形式:手动指定锁定对象,也可是是this,也可以是自定义的锁
2.1.2、方法锁形式:synchronized修饰普通方法,锁对象默认为this
2.2.2、synchronized指定锁对象为Class对象
3.3、保证可见性的原理:内存模型和happens-before规则
1、带着BAT大厂的面试问题去理解Synchronized
- Synchronized可以作用在哪里? 分别通过对象锁和类锁进行举例。
- Synchronized本质上是通过什么保证线程安全的? 分三个方面回答:加锁和释放锁的原理,可重入原理,保证可见性原理。
- Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的。
- Synchronized和Lock的对比,和选择?
- Synchronized在使用时有何注意事项?
- Synchronized修饰的方法在抛出异常时,会释放锁吗?
- 多个线程等待同一个Synchronized锁的时候,JVM如何选择下一个获取锁的线程?
- Synchronized使得同时只有一个线程可以执行,性能比较差,有什么提升的方法?
- 我想更加灵活的控制锁的释放和获取(现在释放锁和获取锁的时机都被规定死了),怎么办?
- 什么是锁的升级和降级? 什么是JVM里的偏斜锁、轻量级锁、重量级锁?
- 不同的JDK中对Synchronized有何优化?
2、Synchronized的使用
在应用Sychronized关键字时需