有偏置的锁定设计决定



我正在尝试了解有偏置锁定背后的理由并使之默认。自从阅读此博客文章以来,即:

"由于大多数对象在其一生中最多都被一个线程锁定,因此我们允许该线程偏向于对象朝向自身"

我感到困惑...为什么有人会设计一组同步的方法,仅由一个线程访问?在大多数情况下,人们专门为多线程用例设计了某些构建块,而不是单线读物。在这种情况下,每一个没有偏见的线程的锁定序列都是为了造成安全的费用,这是一个巨大的开销!有人可以帮我理解这张照片中缺少什么吗?

原因可能是有许多库和类旨在安全的库和类,但在这种情况之外仍然很有用。在收藏框架之前的许多类别中,尤其如此。Vector及其子类是一个很好的例子。如果您还认为大多数Java程序不是多线程,那么在大多数情况下,使用有偏置的锁定方案的总体改进,对于旧版代码尤其如此,在这种情况下,这种类别都是常见的。

<</p>

您在某种程度上是正确的,但是在某些情况下,这是需要的,因为Holger在评论中非常正确。当根本没有尝试过偏见的锁定时,就有所谓的恩典时期,所以这并不是总是会发生这种情况。我上次记得看代码时,它是5 seconds。为了证明这一点,您需要一个可以检查Java对象的标头的库(jol出现了),因为有偏置的锁定在mark word内部。因此,只有在5秒钟后才将锁定锁的物体偏向同一锁。

编辑

我想为此写一个测试,但似乎已经有一个!这是它的链接

相关内容

  • 没有找到相关文章

最新更新