2014-09-20 51 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,但海事組織,書籍更適合學習這個深度的主題。