JVM如何确保在输入对象的同步方法后线程获得锁定?同步关键字内部实现
2
A
回答
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,但海事组织,书籍更适合学习这个深度的主题。
相关问题
- 1. 不使用同步关键字的单例实现的懒惰初始化
- 2. java中的同步关键字
- 3. 同步关键字不起作用
- 4. java如何实现内部类关闭?
- 5. Groovy'as'关键字来实现2+接口
- 6. C99'restrict'关键字的现实用法?
- 7. 关键字实现不工作Java
- 8. read_excel的chunksize关键字未实现
- 9. 在Java中“实现”关键字?
- 10. 我必须重申对函数实现内联关键字
- 11. C#中“内部”关键字的实际用法
- 12. 虚拟关键字内部组件
- 13. Java新的关键字内部结构
- 14. Python 3.5异步关键字
- 15. 实现异步接口同步
- 16. CPython内部实现的文档实现
- 17. 关键字“内容”在Google Adwords API中代替实际的关键字
- 18. Sequelize:如何基于关联的关键字实现搜索?
- 19. jQuery的热键 - 实现的结合,同时内部的输入/ textarea的
- 20. 查找从关键字到关键字的字符串部分
- 21. 如何实现内部RecyclerView
- 22. TreeMap的内部实现
- 23. 内部实现像kproxy
- 24. 部分关键字搜索
- 25. 数字键盘实现
- 26. 实例化“AS”关键字
- 27. 通知内部或外部同步内部监听器
- 28. 在Linux内核中实现正确的模块间同步
- 29. 即使使用同步关键字也会产生ConcurrentModificationException
- 30. 线程进入死锁,尽管同步关键字