前言
网上关于Synchronized的博客和资源有很多,相信百度一下对程序员来说都不是什么难事,推荐看一下敖丙的阿里面试:跟我死磕Synchronized底层实现,我满分回答拿了Offer,讲的挺好的
本文的定位在于,帮助自己和其他有需要的小伙伴,以一种容易记住的方式跟别人交(chui)流(shui),所以很多知识点能不搬运就不搬运了,默认大家都会了
正文
JDK 1.6之后针对Synchronized做了很多的优化,可以说Synchronized现在可以跟JUC包中的工具类相媲美,锁升级功不可没,锁升级是为Synchronized而生的
小技巧
所以关于Synchronized,记住一个锁升级就好了
严密的推理
既然提到锁升级,那跟它息息相关的对象头,是不是也要稍微介绍介绍,谈到了锁对象,是不是也得讲讲锁代码块和锁方法的区别,讲完这三点,其实Synchronized也介绍得差不多了
总得留一些让面试官提问吧
好了,现在回忆一下刚刚的推理过程,锁升级 → 对象头 → 代码块,所以本文的大致脉络就是
1. 锁升级
一谈到锁升级,好多博客都会贴这张图,也不知是出自哪位大佬之手
不了解锁升级过程的小伙伴建议放大看多几遍,毕竟学习知识不能总是投机取巧哦,该啃得还是得啃
复杂的如果实在记不住,就先记这个吧,以后再慢慢熟悉
2. 对象头
关于缓存行伪共享,可以聊到JMM内存模型,因为已经跟对象头没太扯上关系,所以以后再出一篇单独介绍
3. 代码块
分三点讲完了上面涉及的知识,剩下的,好像也就as-if-serial和happens-before了,看了好多文章都没讲清楚这两块,所以没完全掌握的同学请谨慎主动提及。当然已经掌握了的同学就当我没说
参考文章
阿里面试:跟我死磕Synchronized底层实现,我满分回答拿了Offer
synchronized锁升级详细讲解案例:代码+流程图
结语
好了,下次跟被人吹水的时候,谈到Synchronized时,脑海里记住个锁升级就好了。再多的细节,等我下次复盘再补充吧~
最后还是那句,本人所有博客不做商业用途,如若涉及侵权,还请联系删除,互相学习,一起进步~