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. 如何實現同步java關鍵字?
- 2. 關鍵字同步和同步概念
- 3. 同步關鍵字如何在內部工作
- 4. 關於Java參考和同步關鍵字實踐的問題?
- 5. 不使用同步關鍵字的單例實現的懶惰初始化
- 6. 同步關鍵字不起作用
- 7. java中的同步關鍵字
- 8. 靜態關鍵字內部和外部
- 9. Apache Solr實現多字的關鍵字
- 10. java如何實現內部類關閉?
- 11. C99'restrict'關鍵字的現實用法?
- 12. 在Java中「實現」關鍵字?
- 13. 關鍵字實現不工作Java
- 14. 如何實現關鍵字搜索?
- 15. Groovy'as'關鍵字來實現2+接口
- 16. 重新實現JavaScript刪除關鍵字
- 17. read_excel的chunksize關鍵字未實現
- 18. 我必須重申對函數實現內聯關鍵字
- 19. C#中「內部」關鍵字的實際用法
- 20. java同步訪問不同的關鍵部分
- 21. BackboneJS - 使用關鍵字內部視圖
- 22. 虛擬關鍵字內部組件
- 23. Java新的關鍵字內部結構
- 24. 同步的NodeJS實現IO
- 25. Android實現同步音效
- 26. Python 3.5異步關鍵字
- 27. ArrayList內部實現
- 28. 關於同步,同時實現多線程熟睡理髮師
- 29. 實現WCF同步和異步
- 30. 實現異步接口同步