synchronized的锁强度依次为:无锁状态、偏向锁状态、轻量级锁、重量级锁,会随着多线程的竞争强度逐渐升级。这个是众所周知的,最近在看《并发编程的艺术》中提到了锁只能升级而无法降级,但是我记得在之前的某些资料中看到过:锁是可以降级的,只不过条件比较苛刻。不知道对于此有什么具体的权威的资料可以参考呢?
synchronized的锁强度依次为:无锁状态、偏向锁状态、轻量级锁、重量级锁,会随着多线程的竞争强度逐渐升级。这个是众所周知的,最近在看《并发编程的艺术》中提到了锁只能升级而无法降级,但是我记得在之前的某些资料中看到过:锁是可以降级的,只不过条件比较苛刻。不知道对于此有什么具体的权威的资料可以参考呢?
8 回答6.8k 阅读
4 回答1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答648 阅读✓ 已解决
2 回答1.2k 阅读
2 回答1.5k 阅读
这玩意儿并没有 JDK 标准,完全看各家 JVM 是咋实现的了。
像 HotSpot JVM 其实就支持锁降级,但是锁升降级效率较低,如果频繁升降级的话对性能就会造成很大影响。重量级锁降级发生于 STW 阶段,降级对象为仅仅能被 VMThread 访问而没有其他 JavaThread 访问的对象。
被锁的对象都被垃圾回收了有没有锁还有啥关系?因此基本认为锁不可降级。
原文:
参考:http://openjdk.java.net/jeps/...