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