java - 偏向锁定设计决策

标签 java concurrency locking biased-locking

我正在尝试了解偏向锁定背后的基本原理并将其设为默认值。自读this blog post ,即:

“由于大多数对象在其生命周期中最多被一个线程锁定,我们允许该线程将对象偏向自身”

我很困惑......为什么有人会设计一组同步的方法,只能由一个线程访问?在大多数情况下,人们专门为多线程用例设计某些构建 block ,而不是单线程用例。在这种情况下,非偏向线程的每次锁获取都以安全点为代价,这是一个巨大的开销!有人可以帮我理解我在这张照片中遗漏了什么吗?

最佳答案

原因可能是有相当数量的库和类被设计为线程安全的,但在这种情况之外仍然有用。对于 Collections 框架之前的许多类来说尤其如此。 Vector 及其子类就是一个很好的例子。如果您还考虑到大多数 Java 程序不是多线程的,那么在大多数情况下使用偏向锁定方案是一种整体改进,对于使用此类类的遗留代码尤其如此。

关于java - 偏向锁定设计决策,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47519963/

相关文章:

java - 如何在 jasper 报告中将字符串转换为 double 值?

java - 类似于 Java 中的 Rendez-Vous,但不起作用

java - Eclipse 无法加载 : failed to find a main class

java - 从数组开始解析 JSON api - [

java - 结合 putIfAbsent 并替换为 ConcurrentMap

.net - SwitchToThread/Thread.Yield 与 Thread.Sleep(0) 与 Thread.Sleep(1)

c# - 线程和锁定资源

锁定和 Redis

c# - 锁定成本

java - 如何判断hibernate返回sql错误