我正在尝试了解偏向锁定背后的基本原理并将其设为默认值。自读this blog post ,即:
“由于大多数对象在其生命周期中最多被一个线程锁定,我们允许该线程将对象偏向自身”
我很困惑......为什么有人会设计一组同步的方法,只能由一个线程访问?在大多数情况下,人们专门为多线程用例设计某些构建 block ,而不是单线程用例。在这种情况下,非偏向线程的每次锁获取都以安全点为代价,这是一个巨大的开销!有人可以帮我理解我在这张照片中遗漏了什么吗?
最佳答案
原因可能是有相当数量的库和类被设计为线程安全的,但在这种情况之外仍然有用。对于 Collections 框架之前的许多类来说尤其如此。 Vector
及其子类就是一个很好的例子。如果您还考虑到大多数 Java 程序不是多线程的,那么在大多数情况下使用偏向锁定方案是一种整体改进,对于使用此类类的遗留代码尤其如此。
关于java - 偏向锁定设计决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47519963/