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. 線程進入死鎖,儘管同步關鍵字