您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Java中怎么實現多線程同步,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
讓我們從JVM的角度來看看鎖這個概念:
在Java程序運行時環境中,JVM需要對兩類線程共享的數據進行協調:
1)保存在堆中的實例變量
2)保存在方法區中的類變量
這兩類數據是被所有線程共享的。(程序不需要協調保存在Java 棧當中的數據。因為這些數據是屬于擁有該棧的線程所私有的。)
在java虛擬機中,每個對象和類在邏輯上都是和一個監視器相關聯的。對于對象來說,相關聯的監視器保護對象的實例變量。對于類來說,監視器保護類的類變量。
(如果一個對象沒有實例變量,或者一個類沒有變量,相關聯的監視器就什么也不監視。)
詳解Java多線程開發中的數據同步
淺析Java多線程技術中所使用的方法
Java多線程學習總結(一)
Java多線程學習總結(二)
Java多線程的相關機制
為了實現監視器的排他性監視能力,java多線程同步虛擬機為每一個對象和類都關聯一個鎖。代表任何時候只允許一個線程擁有的特權。線程訪問實例變量或者類變量不需鎖。但是如果線程獲取了鎖,那么在它釋放這個鎖之前,就沒有其他線程可以獲取同樣數據的鎖了。(鎖住一個對象就是獲取對象相關聯的監視器)
類鎖實際上用對象鎖來實現。當虛擬機裝載一個class文件的時候,它就會創建一個java.lang.Class類的實例。當鎖住一個對象的時候,實際上鎖住的是那個類的Class對象。
一個線程可以多次對同一個對象上鎖。對于每一個對象,java虛擬機維護一個加鎖計數器,線程每獲得一次該對象,計數器就加1,每釋放一次,計數器就減 1,當計數器值為0時,鎖就被完全釋放了。
java多線程同步不需要自己動手加鎖,對象鎖是java虛擬機內部使用的。在java程序中,只需要使用synchronized塊或者synchronized方法就可以標志一個監視區域。當每次進入一個監視區域時,java 虛擬機都會自動鎖上對象或者類。
看完上述內容,你們對Java中怎么實現多線程同步有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。