Java中Synchronized的轻量级锁CAS竞争多少次会升级为重量级锁?竞争次数记录在哪
在Java中,轻量级锁的竞争次数是通过对象头中的Mark Word中的状态位来记录的。具体来说,当一个线程尝试获取轻量级锁时,它会首先使用CAS操作尝试将对象头中的Mark Word更新为指向自己的锁记录。如果CAS操作成功,表示该线程获取了轻量级锁,可以继续执行临界区代码。如果CAS操作失败,表示有其他线程正在竞争该锁。
当竞争次数达到一定阈值(Java 6和7默认是15次,Java 8默认是10次),轻量级锁就会升级为重量级锁。升级过程中,JVM会使用自旋(spin)来尝试获取锁,如果自旋次数超过一定阈值仍然无法获取锁,线程就会进入阻塞状态,将锁升级为重量级锁。
需要注意的是,轻量级锁和重量级锁的实现细节可能因JVM的不同而有所差异,并且在未来的JVM版本中可能会有所改变。因此,上述提到的竞争次数阈值也可能在不同的JVM版本中有所变化。
原文地址: http://www.cveoy.top/t/topic/iIvw 著作权归作者所有。请勿转载和采集!