91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

托克逊县| 霞浦县| 堆龙德庆县| 甘洛县| 榆林市| 河池市| 留坝县| 高平市| 宽城| 马公市| 鸡泽县| 喀喇| 朝阳县| 恩施市| 布拖县| 广宁县| 崇明县| 新乡县| 隆安县| 沂水县| 安乡县| 定远县| 陆丰市| 黄山市| 和静县| 梧州市| 玉山县| 略阳县| 富蕴县| 天镇县| 安福县| 洛南县| 江口县| 五河县| 宁阳县| 金堂县| 株洲县| 丹凤县| 罗平县| 体育| 宜兰县|