我经常使用一些Java机制来处理多线程问题,例如AtomicInteger
、synchronized
...
我的问题是:Java 如何实现这些锁机制?我的意思是:Java在实现的时候也会遇到多线程的问题,他们怎么处理。是否所有的操作系统都有锁机制,Java 只是简单地调用它们的 API。
最佳答案
锁在Java中的实现是特定于Java平台的指令集的。例如,对于 x86,它可能在最低级别使用 CMPXCHG 指令 - 原子比较和交换 - 来实现锁的快速路径。 CMPXCHG 指令是 compare-and-swap保证在硬件级别进行原子内存访问的指令。
如果线程不能立即获取锁,那么它可以“自旋锁”或者它可以执行系统调用来安排不同的线程。根据平台、JVM 开关等使用不同的策略。
请注意,在任何实现(高效)锁定的语言中,实现它都有一些“黑魔法”。这可能是一个汇编代码库,或者是 native 代码编译器中的一些智能,它们知道为某些字节码或“内部”方法调用注入(inject)特殊指令。
关于java - Java是如何实现锁的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813631/