Java如何实现锁

Java如何实现锁,java,multithreading,operating-system,locking,Java,Multithreading,Operating System,Locking,我经常使用一些Java机制来处理多线程问题,例如AtomicInteger,synchronized 我的问题是:Java如何实现这些锁机制?我的意思是:在实现时,Java也会遇到多线程问题,它们如何处理呢。是否所有操作系统都有锁机制,Java只需调用它们的API。Java中锁的实现特定于Java平台的指令集。例如,对于x86,它可能在最低级别使用CMPXCHG指令—原子比较和交换—来实现锁的快速路径。CMPXCHG指令是在硬件级别保证原子内存访问的指令 如果线程不能立即获取锁,那么它可以“sp

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


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

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

如果线程不能立即获取锁,那么它可以“spinlock”或者执行系统调用来调度不同的线程。根据平台、JVM交换机等不同,使用不同的策略



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

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

如果线程不能立即获取锁,那么它可以“spinlock”或者执行系统调用来调度不同的线程。根据平台、JVM交换机等不同,使用不同的策略



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

所有操作系统都有锁机制,Java只是简单地调用它们的API吗?简言之:是的。接下来的问题是:操作系统呢,那么操作系统就必须解决并发问题。答:是的-它使用CPU的特殊功能来实现这一点。而且,更深入地说,大多数服务器/工作站/笔记本电脑/移动设备微处理器都支持操作系统使用的锁定硬件。如果您想深入了解它的真正工作原理,这是一本值得学习的好书:是否所有操作系统都有锁机制,Java只是简单地调用它们的API——简言之:是的。接下来的问题是:操作系统怎么样,那么操作系统就必须解决并发问题。答:是的-它使用CPU的特殊功能来实现这一点。而且,更深入地说,大多数服务器/工作站/笔记本电脑/移动设备微处理器都支持操作系统使用的锁定硬件。如果您想深入了解它的真正工作原理,这是一本值得学习的好书:对于实现锁定机制,Java将使用两种方法:1。实现他们自己的算法(如您所提到的)2。使用操作系统API(正如对我问题的一些评论)我的假设正确吗?是的。这些都是备选方案。因此,为了实现锁机制,Java将使用两种方法:1。实现他们自己的算法(如您所提到的)2。使用操作系统API(正如对我问题的一些评论)我的假设正确吗?是的。这些是替代方案。