【面试官】你先说说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有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!

全部评论

相关推荐

上海高顿教育 测开实习 4k一个月
点赞 评论 收藏
分享
高顿教育,base上海。刚进去腾讯会议里有两个人,我以为是群面,结果一个面试官问完后另一个面试官来问。无八股,项目拷打。kafka流式处理的过程?你用到了时间窗口?为什么要用这个,和其他的窗口相比呢?(给我问懵了,我就调用了个api)DFA算法是怎么实现的?为什么用ArrayIist?Linklist和arraylist的区别?消息如何保证顺序性?从生产者到消费者整个过程说一下反问。业务就是教育这类系统的开发多久出结果?一两天内然后结束了,让我等他一下。过了一会另一个面试官,就是一直在旁听的那个面试官和我聊天。他说我说话停顿,语速比较慢,是不熟悉还是性格就是说话比较慢我有点哭笑不得,我说话比较慢其实是一直在想从哪里开始说会说的比较通顺,想让面试官听懂而且毕竟全程没开摄像头,光聊天,我都想拿画板给他演示了然后问我专业的课程,学的基础如何,然后还问我有没有研究源码的习惯,我说有,他让我讲讲比较拿手的我就说了hashmap的底层原理,他问为什么负载因子是0.75,不是0.6?不是0.76?不能是0.8?能不能修改?怎么修改?当时记了一下,没仔细去推敲,全去理解扩容机制了,然后磕磕绊绊的说不出来,尴尬了然后问了下评价,面试官说掌握的技术还可以,也有自己的思考,然后给了两个建议技术栈不是越广越好,应该多了解底层原理,像hashmap底层为什么这样实现,这些数字是什么含义?能让我走的更远第二个就是数据结构和算法,是必须要弄透彻的部分,他说程序无非就是数据结构+算法这两部分弄清楚之后,就会发现其他框架也有类似的东西总体来说还不错,感觉第二个面试官更厉害一点,我还担心说hashmap底层原理没说出来给我扣分,他说不用担心,我们就是聊天,不会影响最终结果希望快点出结果对了,面试官说看了我的博客,没法判断我掌握的情况都是之前写的博客,没什么技术含量
查看8道真题和解析
点赞 评论 收藏
分享
我以为没有校招同学去看 Spring 原理,之前就没考虑过,结果还真有,那就这个问题聊聊我的看法。结论是对于绝大部分校招同学,看 Spring 的原理属于浪费时间。以下是我的一些论据:1. 对于现在的校招面试,我感觉是不健康的,问的那些东西,3年社招也不过如此。但是受环境影响,改变不了公司只能改变自己,迫使自己变卷去学习其中的高频考点。很明显 Spring 并不包含其中,学了之后精力就顾不上那些高频考点,比如 Redis、MySQL、JUC、JVM、消息队列、网络、项目、实习等。2. 就算常规的八股、项目、算法都没问题了,想深入一个技术点学习,那我也不推荐 Spring。面试官绝大概率是没看过 Spring 源码的,你和他硬聊他不熟悉的领域,根本不会和你往下说,你也就发挥不出来。3. 相比于 Spring 原理,我更推荐学习类似于 Redis、MySQL 深入研究,比如说持久化、淘汰算法、集群等,或者说研究消息队列的原理。一般像消息队列线上出问题的概率虽然不多,但也不少,基本上没听说过 Spring 出过啥问题吧。从概率上说面试官对消息队列感该兴趣的概率也会大不少。那万一面试官也会 Spring 原理呢?你也说了,是万一,万分之九千九百九十九不会,时间付出和产出不成正比。如果大家本着面试学习,学习一个内容是否有用,取决于面试市场,尽量不要在冷门的技术上占用时间。说了这么多不是说 Spring 原理不需要学,Spring 里用了很多好的设计,如果在时间不紧急的情况下提升自己技术是完全没问题的,建议在工作后学习。#25届秋招##实习#
夺命喵九:我学不会,所以我先不需要学
点赞 评论 收藏
分享
8 17 评论
分享
牛客网
牛客企业服务