假设程序刚开始跑, 只有一个线程在那重入, 一个线程应该是偏向锁的情况,那它是怎么控制重入次数的呢?
如果再来几个线程,就变成重量级锁了, 如果这个线程已经重入了10次还在跑。
重量级锁在在moniter中记录, 那这10次在偏向锁以及轻量级锁的时候会记录在哪里
假设程序刚开始跑, 只有一个线程在那重入, 一个线程应该是偏向锁的情况,那它是怎么控制重入次数的呢?
如果再来几个线程,就变成重量级锁了, 如果这个线程已经重入了10次还在跑。
重量级锁在在moniter中记录, 那这10次在偏向锁以及轻量级锁的时候会记录在哪里
如果一个线程在重入就是不停的在执行monitorenter、monitorexit。当他判断自己已经获取到对象的锁时,就只是计数器加一。偏向锁或者轻量级锁、重量级锁都是只是获取锁的方式,跟计数器不是一个逻辑。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
偏向锁没有次数这一说,会在监视器头里记录线程ID,如果一直是这个ID,就相当于无锁状态。线程重入没太明白你的意思,一般说的是锁重入。猜测你说的是锁重入。偏向锁中单个线程中锁重入,也相当于是没锁。而轻量级锁,如果mark word 和 栈上displace 的交换失败,依然会检查是否当前线程获取了锁,如果获取了,就继续执行,如果不是当前线程获取了,说明出现了线程争抢,开始膨胀为重量级锁。参考《深入理解java虚拟机》锁优化那一章节。