请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

synchronized锁升级的过程有些不太理解

一哥,轻量级锁升级为重量级锁到底是怎么升级的呢。竞争的剧烈成程度是指有很多线程涌进来然后很多都去自旋才升级的吗。(我不知道我表达是否清楚。就是升级为重量级锁是线程数为直接原因,还是说数量+自旋次数导致的呢,因为自旋毕竟浪费了cpu资源)。还有就是如果线程少了锁会从重量级再一步步退回到偏向锁吗?

正在回答 回答被采纳积分+3

1回答

张勤一 2020-12-08 10:12:37

同学你好:

    其实,对于技术的学习,一定不要追求的过于细致,特别是这种“看不见摸不着的”知识点。我这里简单的讲解下这个锁升级的过程,同时,我也跟你说下关于 synchronized 关键字面试会问的问题(至于怎么使用这个关键字还是比较简单的)。

    synchronized 锁升级会有这样的几个过程:

    (1)无锁状态:这个比较简单,不使用这个关键字,没有竞争的情况下就是这个状态;

    (2)自旋锁:只有一个线程在使用这把锁,那么,实际上也是没有竞争条件的,所以,JVM 优化使用自旋锁,不用来回的加锁、释放锁;

    (3)轻量级锁:这就是当系统中存在竞争时,会首先升级到这个状态,让 CPU 自旋,而不是进入到睡眠状态;

    (4)重量级锁:当系统中存在着大量的竞争条件(如何确定大量,由 JVM 去判定),会让当前没有获取到锁的线程阻塞,其他线程释放了之后再去唤醒

    那么,关于这个关键字,面试的时候可能会问什么呢?主要的也就两个问题(我觉得这才是你关注的问题吧):

    (1)synchronized 与 ReetrantLock 之间的区别是什么,其实就是问你各自的实现原理是什么?

    (2)synchronized 适用在什么场景下?


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

1 回复 有任何疑惑可以回复我~
  • 提问者 落烨的位置 #1
    谢谢一哥,我有时候就是会钻牛角尖,就是一个点想不通或者不清楚就难受,以后改正。
    回复 有任何疑惑可以回复我~ 2020-12-08 10:48:24
  • 张勤一 回复 提问者 落烨的位置 #2
    没必要的,搞懂这些东西无非就是浪费时间
    回复 有任何疑惑可以回复我~ 2020-12-08 11:02:50

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信