synchronized重入和升级
假设程序刚开始跑, 只有一个线程在那重入, 一个线程应该是偏向锁的情况,那它是怎么控制重入次数的呢?
如果再来几个线程,就变成重量级锁了, 如果这个线程已经重入了10次还在跑。
重量级锁在在moniter中记录, 那这10次在偏向锁以及轻量级锁的时候会记录在哪里
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
偏向锁没有次数这一说,会在监视器头里记录线程ID,如果一直是这个ID,就相当于无锁状态。线程重入没太明白你的意思,一般说的是锁重入。猜测你说的是锁重入。偏向锁中单个线程中锁重入,也相当于是没锁。而轻量级锁,如果mark word 和 栈上displace 的交换失败,依然会检查是否当前线程获取了锁,如果获取了,就继续执行,如果不是当前线程获取了,说明出现了线程争抢,开始膨胀为重量级锁。参考《深入理解java虚拟机》锁优化那一章节。
如果一个线程在重入就是不停的在执行monitorenter、monitorexit。当他判断自己已经获取到对象的锁时,就只是计数器加一。偏向锁或者轻量级锁、重量级锁都是只是获取锁的方式,跟计数器不是一个逻辑。