【面试官】你先说说synchronized的实现原理?
- 面试官:知道可重入锁有哪些吗?
- 面试官:你先说说synchronized的实现原理?
- 面试官:那synchronized有什么缺点?
- 面试官:为什么上下文切换要保存当前线程状态?
- 面试官:可以怎么解决synchronized资源消耗吗?
- 面试官:那它们都有什么优缺点?
大家好,我是南哥。
一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。
文章目录
- 可重入锁
- synchronized实现原理
- synchronized缺点
- 保存线程状态
- 锁升级
- 锁升级优缺点
1. 可重入锁
面试官:知道可重入锁有哪些吗?
可重入意味着获取锁的粒度是线程而不是调用,如果大家知道这个概念,会更容易理解可重入锁的作用。
既然获取锁的粒度是线程,意味着线程自己是可以获取自己的内部锁的,而如果获取锁的粒度是调用则每次经过同步代码块都需要重新获取锁。
举个例子。线程A获取了某个对象锁,但在线程代码的流程中仍需再次获取该对象锁,此时线程A可以继续执行不需要重新再获取该对象锁。另外线程如果要使用父类的同步方法,由于可重入锁也无需再次获取锁。
在Java中,可重入锁主要有ReentrantLock、synchronized。
2. synchronized实现原理
面试官:你先说说synchronized的实现原理?
synchronized的实现是基于monitor的。任何对象都有一个monitor与之关联,当monitor被持有后,对象就会处于锁定状态。而在同步代码块的开始位置,在编译期间会被插入monitorenter指令。
当线程执行到monitorenter指令时,就会尝试获取monitor的所有权,如果获取得到则代表获得锁资源。
2.1 synchronized缺点
面试官:那synchronized有什么缺点?
在Java SE 1.6还没有对synchronized进行了各种优化前,很多人都会称synchronized为重,因为它对资源消耗是比较大的。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!