【面试官】你先说说synchronized的实现原理?

  • 面试官:知道可重入锁有哪些吗?
  • 面试官:你先说说synchronized的实现原理?
  • 面试官:那synchronized有什么缺点?
  • 面试官:为什么上下文切换要保存当前线程状态?
  • 面试官:可以怎么解决synchronized资源消耗吗?
  • 面试官:那它们都有什么优缺点?

大家好,我是南哥。

一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。

文章目录

  1. 可重入锁
  2. synchronized实现原理
    1. synchronized缺点
    2. 保存线程状态
    3. 锁升级
    4. 锁升级优缺点

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%内容,订阅专栏后可继续查看/也可单篇购买

Java面试突击 文章被收录于专栏

👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!

全部评论

相关推荐

用友重庆分公司 客开实习生 实习期100一天 本科
点赞 评论 收藏
分享
09-14 17:39
已编辑
门头沟学院 Java
#软件开发笔面经#1、自我介绍;2、你所掌握的这些知识点、技术是通过什么途径获取的?3、你讲一下你们这个后端架构是怎么设计的以及为什么要这么设计?4、谈谈你对spring、springboot对开发的优势,在架构方面提供了哪些便利性?5、你了解开发环境、测试环境、生产环境是如何切换的吗?nacos做配置中心的原理是什么?6、websocket具体应该在什么业务场景呢?这个协议的特点是什么?请你结合其他的网络协议http、tcp对比一下,如何可以的话可以说一说websocket具体实现的原理是什么;7、你了解的微服务的底层的通信协议有哪些?比如说springcloud或者其他的?8、这些通信协议里面也都有设计这个线程模型?你了解哪些线程模型呢?web容器里面,比如说tomcat、jetty用的什么?9、你是否涉及到一些多线程的场景,请你展开说说;10、threadlocal涉及到多线程的时候会发生哪些问题?该如何去处理呢?11、你是怎么理解线程不安全呢?为什么会发生线程不安全呢?12、解决并发安全问题就是通过加锁,你在实际项目开发中,如何使用的?13、秒杀场景,你要加锁,其中需要注意的地方有哪些?14、你碰到过数据库中过的死锁吗?请你结合数据库的锁机制描述一个死锁的实际实例;15、你这系统在进行报表、跳板的时候有查询的性能瓶颈,你如何进行优化?16、你可以发散一下思维,做一个大型的电商系统,有哪些核心的业务模块呢?17、反问环节;
点赞 评论 收藏
分享
8 17 评论
分享
牛客网
牛客企业服务