java - Java是如何实现锁的

标签 java multithreading operating-system locking

我经常使用一些Java机制来处理多线程问题,例如AtomicIntegersynchronized ...

我的问题是:Java 如何实现这些锁机制?我的意思是:Java在实现的时候也会遇到多线程的问题,他们怎么处理。是否所有的操作系​​统都有锁机制,Java 只是简单地调用它们的 API。

最佳答案

锁在Java中的实现是特定于Java平台的指令集的。例如,对于 x86,它可能在最低级别使用 CMPXCHG 指令 - 原子比较和交换 - 来实现锁的快速路径。 CMPXCHG 指令是 compare-and-swap保证在硬件级别进行原子内存访问的指令。

如果线程不能立即获取锁,那么它可以“自旋锁”或者它可以执行系统调用来安排不同的线程。根据平台、JVM 开关等使用不同的策略。


请注意,在任何实现(高效)锁定的语言中,实现它都有一些“黑魔法”。这可能是一个汇编代码库,或者是 native 代码编译器中的一些智能,它们知道为某些字节码或“内部”方法调用注入(inject)特殊指令。

关于java - Java是如何实现锁的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813631/

相关文章:

java - 使用 Swing Worker 拖放 Java

java - Oracle XSLT 处理器

java - 我应该将枚举作为参数传递还是传递其文字值

c++ - 在 C++ 中创建和使用线程

c++ - "real-time"约束是否会阻止使用任务计划程序?

c++ - 如果我在 Symbian OS 5th ed 中通过浏览器单击 URL,我如何默认打开我的应用程序

Java像图一样遍历一个大的HashMap

java - 无法从http请求获取JSON

c# - 这个例子线程安全吗?

windows - 数据如何存储在Windows剪贴板中