【发布时间】:2013-10-08 11:46:14
【问题描述】:
在某些时候线程会竞争监视器,此时一个线程应该获胜,Java 是否使用 CPU 中内置的原子 CAS 操作来实现对这些监视器的获取,如果不是,这是如何工作的?
【问题讨论】:
-
这是一个虚拟机实现细节。
-
你不需要实现那个
-
为什么重要? synchronized 使用确保其目标所需的任何特定于平台的方式提供其并发保证;在根本不支持并发的系统中,或者当 Java 可以证明该方法永远不会被并发访问时,它甚至可以优化为 noop。它们的具体实现方式是您无需担心的实现细节,如果您的 Java 实现不能提供该保证,那么它必须是一个错误或(很少)有文档记录的与标准的偏差。
-
是的,但我对它的工作原理很感兴趣,原因是当争用高时,同步块优于 java CAS 操作,因为 CAS 在高争用期间使用更多 cpu 时间,但我相信Java 同步必须在 CPU 级别使用 CAS 操作才能正确获取锁,如果这是真的,那么这将产生与在 Java 同步上使用 java CAS 操作相同的问题。
-
我相信在考虑性能决策时这是一个有趣的问题。
标签: java concurrency synchronization compare-and-swap