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