【问题标题】:How does Java implement lockJava是如何实现锁的
【发布时间】:2016-10-15 06:45:26
【问题描述】:

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

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

【问题讨论】:

  • 是否所有操作系统都有锁定机制,Java 只是简单地调用它们的 API - 简而言之:是的。
  • 接下来的问题是:操作系统呢,那么操作系统就必须解决并发问题。答:是的 - 它使用 CPU 的特殊功能来执行此操作。
  • 而且,再深入一点,大多数服务器/工作站/笔记本电脑/移动设备的微处理器都有硬件支持操作系统使用的锁定。
  • 如果您想深入了解它的实际工作原理,这是一本值得学习的好书:amazon.com/Art-Multiprocessor-Programming-Revised-Reprint/dp/…

标签: java multithreading operating-system locking


【解决方案1】:

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

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


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

【讨论】:

  • 所以为了实现锁机制,Java 将使用两种方式:1. 实现自己的算法(正如你所提到的) 2. 使用 OS API(作为我的问题中的一些 cmets)我的假设是否正确?
  • 是的。这些是替代品。
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多