中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中各種鎖的介紹

發布時間:2021-06-22 15:25:38 來源:億速云 閱讀:154 作者:chen 欄目:開發技術

本篇內容介紹了“Java中各種鎖的介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、一張圖了解21種鎖

Java中各種鎖的介紹

二、樂觀鎖

應用 
	CAS
思想
	一種樂觀思想,假定當前環境是讀多寫少,遇到并發寫的概率比較低,讀數據時認為別的線程不會正在進行修改
實現
	寫數據時,判斷當前 與期望值是否相同,如果相同則進行更新(更新期間加鎖,保證是原子性的)

三、悲觀鎖

應用 
	synchronized、vector、hashtable
思想:
	一種悲觀思想 ** ,即認為寫多讀少,遇到并發寫的可能性高
實現
	每次讀寫數據都會認為其他線程會修改,所以每次讀寫數據時都會上鎖
缺點
	他線程想要讀寫這個數據時,會被這個線程block,直到這個線程釋放鎖然后其他線程獲取到鎖

四、自旋鎖

應用 
	CAS
實現
	為了讓線程等待,我們只須讓線程執行一個忙循環
優點
	 避免了線程切換的開銷,掛起線程和恢復線程的操作都需要轉入內核態中完成,這些操作給Java虛擬機的并發性能帶來了很大的壓力
缺點
	占用處理器的時間,如果占用的時間很長,會白白消耗處理器資源,而不會做任何有價值的工作,帶來性能的浪費
改進
	自旋等待的時間必須有一定的限度,如果自旋超過了限定的次數仍然沒有成功獲得鎖,就應當使用傳統的方式去掛起線程
jvm調優
	-XX:PreBlockSpin 設置固定失敗次數
	自適應自旋 前一次在同一個鎖上的自旋時間及鎖的擁有者的狀態來決定的,通過系統監控進行調整

五、悲觀鎖

應用 
	synchronized、vector、hashtable
思想:
	一種悲觀思想 ** ,即認為寫多讀少,遇到并發寫的可能性高
實現
	每次讀寫數據都會認為其他線程會修改,所以每次讀寫數據時都會上鎖
缺點
	他線程想要讀寫這個數據時,會被這個線程block,直到這個線程釋放鎖然后其他線程獲取到鎖

六、可重入鎖(遞歸鎖)

應用 
	synchronized、Reentrantlock、Lock
思想:
	 任意線程在獲取到鎖之后能夠再次獲取該鎖而不會被鎖所阻塞
實現
	 通過組合自定義同步器來實現鎖的獲取與釋放
	 獲取鎖:識別獲取鎖的線程是否為當前占據鎖的線程 ,如果是,則再次成功獲,。獲取鎖后,進行計數自增
	 釋放鎖:釋放鎖時,進行計數自減
優點:
	 避免死鎖
缺點
	他線程想要讀寫這個數據時,會被這個線程block,直到這個線程釋放鎖然后其他線程獲取到鎖

七、讀寫鎖

應用 
	ReentrantReadWriteLock,CopyOnWriteArrayList、CopyOnWriteArraySet
思想
	讀寫分離 
實現
	Java 提供了讀寫鎖,在讀的地方使用讀鎖,在寫的地方使用寫鎖
	讀鎖: 允許多個線程獲取讀鎖,同時訪問同一個
	寫鎖: 只允許一個線程獲取寫鎖,不允許同時訪問同一個資源
優點:
	 避免死鎖
缺點
	他線程想要讀寫這個數據時,會被這個線程block,直到這個線程釋放鎖然后其他線程獲取到鎖

八、公平鎖

應用 
	Reentrantlock(true)
思想
	多個線程按照申請鎖的順序來獲取鎖
實現
	在并發環境中,每個線程會先查看此鎖維護的等待隊列,如果當前等待隊列為空,則占有鎖,如果等待隊列不為空,則加入到等待隊列的末尾,
	按照FIFO的原則從 隊列中拿到線程,然后占有鎖

九、非公平鎖

應用 
	synchronized、reentrantlock(false)
思想
	線程嘗試獲取鎖,如果獲取不到,則再采用公平鎖的方式
實現
	多個線程獲取鎖的順序,不是按照先到先得的順序,有可能后申請鎖的線程比先申請的線程優先獲取鎖

十、共享鎖

應用 
	ReentrantReadWriteLock中讀鎖
思想
	可以有多個線程獲取讀鎖,以共享的方式持有鎖

十一、獨鎖

應用 
	synchronized、vector、hashtable、ReentrantReadWriteLock中寫鎖
思想
	是一種思想: 只能有一個線程獲取鎖,以獨占的方式持有鎖

十二、重量級鎖

應用 
	synchronized
思想
	synchronized是通過對象內部的一個叫做監視器鎖(monitor)來實現的,監視器鎖本身依賴底層的操作系統的 Mutex Lock來實現。
缺點
	操作系統實現線程的切換需要從用戶態切換到核心態,成本非常高。這種依賴于操作系統 Mutex Lock來實現的鎖稱為重量級鎖。
改進
	為了優化synchonized,引入了輕量級鎖,偏向鎖。

十三、輕級鎖

應用 
	鎖優化技術
思想
	輕量級鎖是在無競爭的情況下使用CAS操作去消除同步使用的互斥量。
	輕量級是相對于使用操作系統互斥量來實現的重量級鎖而言的。
	輕量級鎖在沒有多線程競爭的前提下,減少傳統的重量級鎖使用操作系統互斥量產生的性能消耗。
	如果出現兩條以上的線程爭用同一個鎖的情況,那輕量級鎖將不會有效,必須膨脹為重量級鎖。
優點
	如果沒有競爭,通過CAS操作成功避免了使用互斥量的開銷
缺點
	如果存在競爭,除了互斥量本身的開銷外,還額外產生了CAS操作的開銷,因此在有競爭的情況下,輕量級鎖比傳統的重量級鎖更慢

“Java中各種鎖的介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汽车| 汨罗市| 商河县| 抚顺县| 肥乡县| 张家港市| 临武县| 丰城市| 西盟| 广东省| 崇礼县| 灌阳县| 灯塔市| 禹城市| 吴旗县| 扎鲁特旗| 冷水江市| 伊宁县| 临猗县| 安丘市| 邯郸县| 涟水县| 基隆市| 滦南县| 苗栗市| 略阳县| 海晏县| 乐至县| 保山市| 南江县| 六枝特区| 贵州省| 新蔡县| 泉州市| 且末县| 犍为县| 宁国市| 华池县| 栾川县| 柯坪县| 苏尼特左旗|