成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java那么多鎖,能鎖住滅霸嗎?

開發(fā) 后端
鎖主要存在四種狀態(tài):“無鎖狀態(tài)、偏向鎖狀態(tài)、輕量級鎖狀態(tài)、重量級鎖狀態(tài)”。其實這四種狀態(tài)都不是Java語言中的鎖,而是Jvm為了提高鎖的獲取與釋放效率而做的優(yōu)化(使用synchronized時)。

[[278405]]

這個圖是不是比上次的好看點?

自旋?

自旋鎖

如果此時拿不到鎖,它不馬上進入阻塞狀態(tài),而愿意等待一段時間。

如果循環(huán)一定的次數還拿不到鎖,那么它才會進入阻塞的狀態(tài),循環(huán)的次數是可以人為指定的。

  •  自旋鎖🌰

有一天去全家買咖啡,服務員說真不巧,前面咖啡機壞了,現在正在修,要等10分鐘喔,恰好沒什么急事,那就等吧,坐到一邊休息區(qū)等10分鐘(其它什么事都沒做)。介就是自旋鎖~(自己空轉一會兒)

覺得有點浪費時間?如果你等了15分鐘,還沒修好,那你可能不愿意繼續(xù)等下去了(15分鐘就是設定的自旋等待的最大時間)

上面說自旋鎖循環(huán)的次數是人為指定的,而自適應旋轉鎖,就厲害了,它不需要人為指定循環(huán)次數,它自己本身會判斷要循環(huán)幾次,而且每個線程可能循環(huán)的次數也是不一樣的。

如果這個線程之前拿到過鎖,或者經常拿到一個鎖,那它自己判斷下來再次拿到這個鎖的概率很大,循環(huán)次數就大一些;如果這個線程之前沒拿到過這個鎖,那它就沒把握了,怕消耗CPU,循環(huán)次數就小一點。

它解決的是“鎖競爭時間不確定”的問題,但也不一定它自己設定的一定合適。

  •  自適應旋轉鎖🌰

還是前面去全家等咖啡的栗子吧~ 要是等到5分鐘,還沒修好,你目測10分鐘里也修不好,就不再等下去了(循環(huán)次數小);

要是等了10分鐘了,服務員說非常抱歉,快了快了,再1分鐘就可以用了,你也還不急,都已經等了10分鐘了,就多等一會兒嘛(循環(huán)次數大)。

這個是自旋鎖的簡單代碼實現:

 

  1. public class SpinLock {  
  2.     private AtomicReference<Thread> cas = new AtomicReference<Thread>();  
  3.     public void lock() {  
  4.         Thread current = Thread.currentThread();  
  5.         // 利用CAS  
  6.         while (!cas.compareAndSet(null, current)) {  
  7.             // DO nothing  
  8.         }  
  9.     }  
  10.     public void unlock() {  
  11.         Thread current = Thread.currentThread();  
  12.         cas.compareAndSet(current, null);  
  13.     }  

稍微分析下~

  •  lock()方法利用CAS,當第一個線程A獲取鎖的時候,能夠成功獲取到,不會進入while循環(huán);
  •  如果此時線程A沒有釋放鎖,另一個線程B又來獲取鎖,此時由于不滿足CAS,所以就會進入while循環(huán);
  •  然后線程B會不斷判斷是否滿足CAS,直到A線程調用unlock方法釋放了該鎖,它才能獲取鎖。   

  • 主要存在以下問題:

 

  1.  如果某個線程持有鎖的時間過長,就會導致其它等待獲取鎖的線程進入循環(huán)等待,消耗CPU。使用不當會造成CPU使用率極高。
  2.  本身無法保證公平性,即無法滿足等待時間最長的線程優(yōu)先獲取鎖。不公平的鎖就會存在“線程饑餓”問題。
  3.  無法保證可重入性。基于自旋鎖,可以實現具備公平性和可重入性質的鎖。

后面這幾個以后有空再詳細來說~

自旋鎖 Vs 阻塞鎖

  •  阻塞的栗子~

去一個熱門飯店吃飯,到了門口一看,門口的座位坐滿了人……這咋整……服務員說,您可以先拿個號~小票上掃個二維碼,關注咱們,輪到您了,服務號里就會有提示噠~(很熟悉是不是?)

然后你就先取了號去逛逛周圍小店去了,等輪到你了,手機里收到一條服務提醒消息,到你啦~這時你再去,就可以進店了。

這就是阻塞的過程~

那自旋呢?

就是你自己其它事情都不做,等在那里,就像去超市排隊結賬一樣,你走開的話是沒有人會通知你的,只能重新排隊,需要自己時刻檢查有沒有排到(能不能訪問到共享資源)。

這里插播一下:

阻塞或喚醒一個Java線程需要操作系統(tǒng)切換CPU狀態(tài)來完成,這種狀態(tài)轉換需要耗費處理器時間。

來看看自旋和阻塞的比較~

只升不降的鎖狀態(tài)

鎖主要存在四種狀態(tài):“無鎖狀態(tài)、偏向鎖狀態(tài)、輕量級鎖狀態(tài)、重量級鎖狀態(tài)”。

其實這四種狀態(tài)都不是Java語言中的鎖,而是Jvm為了提高鎖的獲取與釋放效率而做的優(yōu)化(使用synchronized時)。

它們會隨著競爭的激烈而逐漸升級,并且是不可逆的升級。

升級過程是這樣的:

  •  偏向鎖 -> 輕量級鎖 -> 重量級鎖

關于無鎖~

如果一個方法本來就不涉及共享數據,那它自然就無須任何同步措施去保證正確性,因此會有一些代碼天生就是線程安全的。

它沒有對資源進行鎖定,所有的線程都能訪問并修改同一個資源,但同時只有一個線程能修改成功。

CAS算法 即compare and swap(比較與交換),就是有名的無鎖算法。

狀態(tài)還是詳細比較下吧~

 

 

  •  知道你想要栗子

你經常去一家店坐在同一個位置吃飯,老板已經記住你啦,每次你去的時候,只要店里客人不多,老板都會給你留著那個座位,這個座位就是你的“偏向鎖”,每次只有你這一個線程用。

有一天你去的時候,店里已經坐滿了,你的位置也被別人坐了,你只能等著(進入競爭狀態(tài)),這時那個座位就升級到“輕量級鎖”了。

要是那個座位特別好(臨窗風景最佳,能隔江賞月~)每次你到的時候,都有其他好幾個人也要去搶那個位置,沒坐到那個位置就不吃飯了>_< 那時那個座位就升級到“重量級鎖”了。

是不是好理解啦?

共享 or 獨享?

獅子們集體喝水😄 小河是共享資源~

[[278426]]

要是一只獅子想獨享資源,就這樣了 

[[278427]]

還是專業(yè)地講下概念~(手機上請點擊圖片放大看看~)

   

  • 還有栗子~

每個禮拜小組的各個成員要共同填一份周報表格,

要是每個人打開的時候,可以加一個寫鎖,即你在寫的時候,別人不能修改,這就是獨享鎖(寫鎖); 

但是這份表格大家可以同時打開,看到表格內容(讀取數據),正在改數據的人可以對這份表格加上共享鎖,那這個鎖就是共享鎖。

小總結

對Java的各種鎖概念做了下整理,寫了些自己的理解, 還有很多基礎方面,比如Java的對象頭、對象模型(都比較基礎)、鎖的優(yōu)化、各類鎖代碼實現等,后續(xù)再補充下。有很多公號有很多高水平的文章,需要理解和練習的有太多。

好嘛~ 都講累了,我要先休息休息~

 

 

責任編輯:龐桂玉 來源: Java編程
相關推薦

2013-06-17 10:45:34

2020-07-13 08:40:21

BAT模具設計

2020-06-03 14:43:26

Java虛擬機JVM

2020-04-24 08:15:51

代碼 if else數組

2023-01-24 16:13:22

編程語言JavaIT

2015-09-29 10:12:10

2019-12-02 14:22:01

浪費云計算支出

2011-12-31 14:47:10

Web App

2020-03-31 10:58:38

2021-02-21 08:48:19

技術升職程序員

2018-03-27 08:46:01

數據庫NoSQLredis

2015-06-05 10:17:01

老羅創(chuàng)業(yè)不太成功

2020-11-02 07:05:54

虛擬內存Go

2020-07-13 14:59:59

程序員技能開發(fā)者

2022-08-16 15:20:12

微服務IT運維

2017-08-14 18:00:13

共享單車摩拜

2018-01-12 05:04:34

移動支付用微信支付支付寶

2019-08-09 17:44:32

戴爾

2024-05-27 00:30:00

NumPyPython開源庫

2023-05-26 00:25:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本亚洲精品成人欧美一区 | 精品国产一区二区三区成人影院 | 国产a视频 | 欧美午夜精品 | 深夜福利亚洲 | 日韩中文字幕久久 | 中文字字幕在线中文乱码范文 | 中文字幕在线观看一区 | 久久i| 不卡一区二区三区四区 | 亚洲视频免费在线看 | 在线观看免费黄色片 | 91精品国产91久久久久久密臀 | 亚洲免费久久久 | 天堂一区二区三区 | www.9191.com| 日韩电影免费在线观看中文字幕 | 97精品超碰一区二区三区 | 久一久| 亚洲日日| 亚洲色图综合 | 亚洲久视频 | 黑人巨大精品欧美黑白配亚洲 | 亚洲精品片 | 综合自拍 | 日韩视频免费看 | 国产精品国产成人国产三级 | 日本小视频网站 | av男人的天堂在线 | 99热热99| 在线中文字幕视频 | 成人精品福利 | 国产91久久久久 | 国产真实精品久久二三区 | 综合久久综合久久 | 国产熟熟| 欧一区二区 | 1区2区视频 | 中文天堂在线一区 | av在线天天| 亚洲精品福利视频 |