常見鎖策略,CAS,synchrodized原理講解

  • 🎥?個人主頁:Dikz12
  • 📕格言:那些在暗處執拗生長的花,終有一日會馥郁傳香
  • 歡迎大家👍點贊?評論?收藏

目錄

常見鎖策略?

?樂觀鎖和悲觀鎖

輕量級鎖和重量級鎖

自旋鎖和掛起等待鎖

?讀寫鎖

公平鎖和非公平鎖

CAS?

??編輯

?ABA問題

synchronized原理

synchronozed,屬于哪種鎖?

鎖升級

?鎖消除

鎖粗化?


常見鎖策略?

?樂觀鎖和悲觀鎖

?這是"鎖的一種特性",并不是一把具體的鎖!樂觀,悲觀是對后續鎖沖突是否激烈給出的預測.

樂觀鎖: 如果預測接下來的鎖沖突的概率不大,就可以少做一些事情,就稱為"樂觀鎖".

悲觀鎖:?如果預測接下來的鎖沖突的概率很大,就要多做一些事情,就稱為"悲觀鎖".

輕量級鎖和重量級鎖

?輕量級鎖: 鎖的開銷比較小.

重量級鎖: 鎖的開銷比較大.

樂觀鎖,通常是可以看作輕量級鎖? ? 悲觀鎖,通常可以看作重量級鎖.(也是存在特殊情況的)

一個是預測鎖沖突的概率,一個是實際消耗的開銷.

自旋鎖和掛起等待鎖

?自旋鎖,就是一種輕量級鎖的典型實現.

比如: 使用一個while循環,不停的檢查當前鎖是否釋放,如果沒有釋放,就繼續循環,釋放了獲取鎖,從而結束循環.(忙等,消耗cpu換來了更快的響應速度).

掛起等待鎖: 就屬于重量級鎖的一種典型實現.

要借助系統api來實現,一旦出現鎖競爭,就會在內核中觸發一系列的動作.(比如讓這個線程進入阻塞狀態,暫時不參與cpu調度).

?讀寫鎖

這里的讀寫鎖跟前面"事務"里的給讀加鎖 和 給寫加鎖 不是一樣的概念.

速寫鎖,是加鎖操作,分成讀鎖 和寫鎖.

兩個線程加鎖過程中:

1:?讀鎖和讀鎖之間,不會產生競爭.

2.讀鎖和寫鎖之間,會有競爭.(線程安全問題)

3.寫鎖和寫鎖之間,也會有競爭.

公平鎖和非公平鎖

?

CAS?

Compare and swap?簡稱 CAS. 比較交換的是 內存 和 寄存器.

CAS,就是一個cpu指令,單個的cpu指令,是原子的!就可以使用CAS完成一些操作,進一步替代"加鎖".

也就是基于CAS實現線程安全的方式,也稱為"無鎖編程".

?優點:保證了線程安全,同時避免了阻塞.

?缺點: 1.代碼比較復雜,不好理解

? ? ? ? ? ?2.適合于特定的場景,不如加鎖方式更普適.

?

?原子類里面是基于CAS來實現的!!!

CAS是通過重試的方式,避免穿插; 加鎖則是通過阻塞的方式,避免穿插.

?ABA問題

?CAS 進行操作的關鍵,是通過值"有沒有發生變化" 來作為"沒有其它線程穿插執行"的判斷依據.

在極端情況下,也是會出現問題的.比如: 把值從A- > B ->A,針對第一個線程來說,看起來好像是這個值沒變,實際上已經被穿插執行了.

?解決上訴問題:

只要讓判定的數值,按照一個方向增長即可.? (有增有減,就可能出現ABA)

針對像賬戶余額這樣的操作:

?可以引入一個額外的變量,版本號,約定每次修改余額,都要讓版本號自增.

在使用CAS的時候,就不是直接判定余額,而是判定版本號.

synchronized原理

synchronozed,屬于哪種鎖?

1.對于"樂觀悲觀"是自適應的.

2.對于"輕量和重量"是自適應的.

3.對于"自旋和掛起等待"是自適應的.

4.不是讀寫鎖.

5.是可重入鎖 .

6.是非公平鎖

?

鎖升級

設計JVM的大佬就把synchronized 設置成了 無鎖? 偏向鎖? 輕量級鎖? 重量級鎖 這四種狀態.

?

當你加鎖的時候會先進入偏向鎖的狀態,如果出現"鎖競爭"的可能性就立刻升級成輕量級鎖,?也就是真正意義上的加鎖.

偏向鎖:

?鎖消除

?

鎖粗化?

?synchronized 里頭,代碼越多,就認為鎖的粒度越粗;代碼越少,鎖的粒度越細.

?

粒度細的時候,能夠并發執行的邏輯更多,更有利于充分利用多核cpu資源.

但是,如果粒度細的鎖,被反復加鎖,解鎖可能實際效果還不如粒度粗的鎖. (涉及到鎖競爭問題)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Java+SpringBoot+Vue.js前后端分離玩具購物商城系統設計和實現 可行性分析

博主介紹:黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

已解決java.lang.NullPointerException異常的正確解決方法,親測有效!!!

已解決 java.lang.NullPointerException 異常的正確解決方法,親測有效!!! 文章目錄 問題分析 報錯原因 解決思路 總結 Q1 - 問題分析 在Java編程中,NullPointerException 可能是最常見的運行時異常之一。這種異…

基于Java在線考試網站系統 設計與實現(Springboot框架)畢業設計論文提綱參考

博主介紹:黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

264.【華為OD機試真題】最長子字符串的長度(二)(動態規劃DP-JavaPythonC++JS實現)

??點擊這里可直接跳轉到本專欄,可查閱頂置最新的華為OD機試寶典~ 本專欄所有題目均包含優質解題思路,高質量解題代碼(Java&Python&C++&JS分別實現),詳細代碼講解,助你深入學習,深度掌握! 文章目錄 一. 題目-最長子字符串的長度(二)二.解題思路三.題解代碼…

Transformer 架構—Encoder-Decoder

文章目錄 前言 一、Encoder 家族 1. BERT 2. DistilBERT 3. RoBERTa 4. XML 5. XML-RoBERTa 6. ALBERT 7. ELECTRA 8. DeBERTa 二、Decoder 家族 1. GPT 2. GPT-2 3. CTRL 4. GPT-3 5. GPT-Neo / GPT-J-6B 三、Encoder-Decoder 家族 1. T5 2. BART 3. M2M-100 4. BigBird 前言 …

每日五道java面試題之spring篇(三)

目錄: 第一題 ApplicationContext和BeanFactory有什么區別?第二題 Spring中的事務是如何實現的?第三題 Spring中什么時候Transactional會失效?第四題 Spring容器啟動流程是怎樣的?第五題 Spring Boot、Spring MVC 和 S…

Sip網絡廣播號角,sip廣播系統公共廣播系統有源喇叭

Sip網絡廣播號角,sip廣播系統公共廣播系統有源喇叭 SV-7044VP網絡有源喇叭,具有10/100M以太網接口,內置高品質揚聲器,通過自帶放大器播放網絡音頻,揚聲器輸出功率高達30W,還支持設置最多10個組播優先區域&…

js如何拋異常,拋自定義的異常

js如何拋異常,拋自定義的異常 最簡單的自定義異常 throw "hello" 來自chrome123的控制臺的測試 throw "hello" VM209:1 Uncaught hello (匿名) VM209:1 try{ throw "hello";}catch(e){console.log(e);} VM338:1 hello…

nuxt項目搭建

1.先下載nuxt腳手架 yarn create nuxt-app <項目名>&#xff0c;記得安裝完項目&#xff0c;npm i,下載node包 目錄介紹 components 存放組件分別是頭部&#xff08;包含導航&#xff09;和底部 layouts 頁面布局&#xff0c;實現一個頁面整體架構規則&#xff0c;頭…

XTuner InternLM-Chat 個人小助手認知微調實踐

要解決的問題&#xff1a; 如何讓模型知道自己做什么&#xff0c;是什么樣身份。是誰創建了他&#xff01;&#xff01;&#xff01; 概述 目標&#xff1a;通過微調&#xff0c;幫助模型認清了解對自己身份弟位 方式&#xff1a;使用XTuner進行微調 微調前&#xff08;回答…

精致女童時尚穿搭~你想要的我都有哦

不論是版型還是顏色 都絕絕子的一件輕薄外套 整件看著干凈利落有設計感 兩側按扣式口袋超級實用的 穿著透氣不悶熱 搭配各種風格的褲子都一絕

【安卓基礎5】中級控件

&#x1f3c6;作者簡介&#xff1a;|康有為| &#xff0c;大四在讀&#xff0c;目前在小米安卓實習&#xff0c;畢業入職 &#x1f3c6;本文收錄于 安卓學習大全持續更新中&#xff0c;歡迎關注 &#x1f3c6;安卓學習資料推薦&#xff1a; 視頻&#xff1a;b站搜動腦學院 視頻…

中東阿拉伯阿聯酋迪拜媒體宣發稿新聞報道推廣有哪些平臺渠道?跨境出海營銷

【本篇由言同數字科技有限公司原創】阿拉伯聯合酋長國是一個經濟和文化極為繁榮的地區&#xff0c;其中的迪拜更是以其獨特的地理位置、國際化的環境和世界級的商業和金融中心而出名。 1. 全球市場&#xff1a;阿聯酋迪拜是一個全球化的商業樞紐&#xff0c;吸引了來自世界各地…

無線聽覺新體驗:南卡、韶音、墨覺骨傳導耳機綜合評測

作為一個資深的跑步愛好者&#xff0c;我幾乎離不開音樂的陪伴。不知道大家有沒有同感&#xff0c;有時候一首歌曲就是我堅持下去的動力&#xff0c;尤其是在那段艱難的跑步時刻。但是找到一款既能讓我在運動中自由呼吸、又能提供優質音樂體驗的耳機&#xff0c;并不是一件容易…

C#,動態規劃(DP)丟雞蛋問題(Egg Dropping Puzzle)的三種算法與源代碼

1 扔雞蛋問題 動態規劃&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是運籌學的一個分支&#xff0c;是求解決策過程最優化的過程。20世紀50年代初&#xff0c;美國數學家貝爾曼&#xff08;R.Bellman&#xff09;等人在研究多階段決策過程的優化問題時&#xf…

船舶制造5G智能工廠數字孿生可視化平臺,推進船舶行業數字化轉型

船舶制造5G智能工廠數字孿生可視化平臺&#xff0c;推進船舶行業數字化轉型。隨著數字化時代的到來&#xff0c;船舶行業正面臨著前所未有的機遇與挑戰。為了適應這一變革&#xff0c;船舶制造企業需要加快數字化轉型的步伐&#xff0c;提高生產效率、降低成本并增強市場競爭力…

電氣機械5G智能工廠數字孿生可視化平臺,推進電氣機械行業數字化轉型

電氣機械5G智能工廠數字孿生可視化平臺&#xff0c;推進電氣機械行業數字化轉型。隨著科技的不斷發展&#xff0c;數字化轉型已經成為各行各業發展的重要趨勢。電氣機械行業作為傳統制造業的重要組成部分&#xff0c;也面臨著數字化轉型的挑戰和機遇。為了更好地推進電氣機械行…

就業月薪14K!兩年后漲到25K! 考研失敗后,這個95年小哥哥成功轉行軟件測試,人生開掛了!

01 考研連續失敗 因為沒有特別明確的職業規劃&#xff0c;加上內心的學歷崇拜情節。大學畢業后&#xff0c;我沒有選擇參加工作&#xff0c;而是毅然選擇了加入考研大軍。 備考的日子緊張有序&#xff0c;我也一直在題海里廢寢忘食的遨游&#xff0c;本以為能順順當當地考上自…

每日學習總結20240221

每日總結 20240221 花自飄零水自流。一種相思&#xff0c;兩處閑愁。 —— 李清照「一剪梅紅藕香殘玉簟秋」 1. stat 在Linux中&#xff0c;stat 是一個用于顯示文件或文件系統狀態的命令行工具。它提供了關于文件的詳細信息&#xff0c;包括文件類型、權限、大小、所有者、修…

Codeforces Round 490 (Div. 3)

目錄 A. Mishka and Contest B. Reversing Encryption C. Alphabetic Removals D. Equalize the Remainders E. Reachability from the Capital F. Cards and Joy A. Mishka and Contest 依照題目意思左右遍歷標記即可 void solve(){cin>>n>>m;for(int i1;i…