同步关键字内部实现

时间:2014-09-20 13:10:51

标签: java multithreading synchronization jvm

在进入对象的同步方法后,JVM如何确保线程获得锁定?

3 个答案:

答案 0 :(得分:5)

广泛的问题:

  

JVM如何确保......?

" VM"在" JVM"代表"虚拟机。"您的代码本身并没有做任何事情。当我们说'#34;你的代码运行",我们真正的意思是,JVM 执行你的指令。它是按照JVM规范中规定的规则执行的。其中一条规则是JVM必须永远不要同时为同一个对象上的两个不同线程执行同步块。

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

更深入的是,JVM和操作系统都没有真正做任何事情:它是计算机硬件执行操作系统和JVM的指令,真正让事情发生。

完整的答案"同步如何工作?"这是一本关于操作系统设计的书中的几章,还有一本关于计算机体系结构的书中的几章,以及计算机科学的一部分。要完全理解这一切,您至少需要知道:

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

他们是您可以在维基百科上查找的所有主题,但IMO,书籍更适合学习这一深度的主题。

答案 1 :(得分:3)

  

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

查看整篇文章了解更多信息:http://www.javaworld.com/article/2076971/java-concurrency/how-the-java-virtual-machine-performs-thread-synchronization.html

答案 2 :(得分:1)

整本书都涉及低级实现和并发功能。

但是对于那些希望对它们如何连接以及其背后的逻辑有基本了解的人: JVM使用Java内置Monitor Objects提供的固有锁定来实现“同步”功能。 在较低级别的Java内置监视器对象同步器上,可以使用类似POSIX的同步器(即系统级C库)来实现。

我强烈建议您参加这两个youtube课程,它们以很好的方式介绍了基础知识,因此您可以快速掌握它并学习其语义:

Java内置监视器对象:概述和激励示例

https://www.youtube.com/watch?v=vHAWxXCB9Bg&list=PLZ9NgFYEMxp4UHEwQCltQciArqXDyn6Ms&index=49

Java内置监视器对象:协调

https://www.youtube.com/watch?v=QNi1BH9JcJE&list=PLZ9NgFYEMxp4UHEwQCltQciArqXDyn6Ms&index=51

相关问题