2014-09-20 66 views

回答

2

为了协调多个线程之间的共享数据访问,Java虚拟机将锁与每个对象和类关联起来。锁定就像一个特权,只有一个线程可以在任何时间“拥有”。如果一个线程想要锁定一个特定的对象或类,它会询问JVM。在线程向JVM请求锁定之后的某一时刻 - 可能很快,也许以后可能永远不会 - JVM会将锁定给该线程。当线程不再需要该锁时,它将其返回给JVM。如果另一个线程请求了同一个锁,则JVM将该锁传递给该线程。

退房有关更多信息,整篇文章:http://www.javaworld.com/article/2076971/java-concurrency/how-the-java-virtual-machine-performs-thread-synchronization.html

3

广泛的问题:

如何在JVM确保...?

“JVM”中的“VM”代表“虚拟机”。你的代码本身并没有做任何事情。当我们说“您的代码运行”时,我们的真正意思是,JVM 执行您的指示。而且它按照JVM规范中规定的规则进行操作。其中一条规则指出,JVM不得同时为同一对象上的两个不同线程执行同步块。

但也有很多层洋葱:一个typeical JVM使用本地线程(即,由操作系统提供的线程)来实现Java线程,并且通常依赖于操作系统提供互斥对象来同步线程。

继续深入下去,JVM和操作系统本身都没有真正做任何事情:它是计算机硬件执行操作系统和JVM的指令,真正使事情发生。

完整答案是“同步如何工作?”是一本关于操作系统设计的书籍的几章,另外还有一本关于计算机体系结构的书籍,还有一本关于计算机科学的书。为了充分了解这一切,你至少需要知道:

  • “用户模式指令”与“模式具有特权的说明”,
  • 系统如何调用工作,
  • 如何操作系统“调度程序”执行“上下文切换”
  • “比较和交换(CAS)”,“测试和设置(TAS)”,“负载链接/存储条件(LL/SC)”的硬件同步原语

这些都是你可以查看Wik的主题ipedia,但海事组织,书籍更适合学习这个深度的主题。