国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

開發(fā) 架構(gòu)
這篇文章,就用最簡單的大白話配合N多張手繪圖,給大家講清楚AQS到底是什么?讓各位同學(xué)面試被問到這個問題時,不至于不知所措。

這篇文章,我們來聊聊面試的時候比較有殺傷力的一個問題:聊聊你對AQS的理解?

之前有同學(xué)反饋,去互聯(lián)網(wǎng)公司面試,面試官聊到并發(fā)時就問到了這個問題。當(dāng)時那位同學(xué)內(nèi)心估計受到了一萬點(diǎn)傷害。。。

因?yàn)槭紫龋芏嗳诉€真的連AQS是什么都不知道,可能聽都沒聽說過。或者有的人聽說過AQS這個名詞,但是可能連具體全稱怎么拼寫都不知道。

更有甚者,可能會說:AQS?是不是一種思想?我們平時開發(fā)怎么來用AQS?

總體來說,很多同學(xué)估計都對AQS有一種云里霧里的感覺,如果用搜索引擎查一下AQS是什么?看幾篇文章,估計就直接放棄了,因?yàn)槊苊苈槁榈奈淖郑瑢?shí)在是看不懂!

所以,基于上述痛點(diǎn),咱們這篇文章,就用最簡單的大白話配合N多張手繪圖,給大家講清楚AQS到底是什么?讓各位同學(xué)面試被問到這個問題時,不至于不知所措。

ReentrantLock和AQS的關(guān)系

首先我們來看看,如果用Java并發(fā)包下的ReentrantLock來加鎖和釋放鎖,是個什么樣的感覺?

這個基本學(xué)過Java的同學(xué)應(yīng)該都會吧,畢竟這個是java并發(fā)基本API的使用,應(yīng)該每個人都是學(xué)過的,所以我們直接看一下代碼就好了:

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

上面那段代碼應(yīng)該不難理解吧,無非就是搞一個Lock對象,然后加鎖和釋放鎖。

你這時可能會問,這個跟AQS有啥關(guān)系?關(guān)系大了去了!因?yàn)镴ava并發(fā)包下很多API都是基于AQS來實(shí)現(xiàn)的加鎖和釋放鎖等功能的,AQS是Java并發(fā)包的基礎(chǔ)類。

舉個例子,比如說ReentrantLock、ReentrantReadWriteLock底層都是基于AQS來實(shí)現(xiàn)的。

那么AQS的全稱是什么呢?AbstractQueuedSynchronizer,抽象隊(duì)列同步器。給大家畫一個圖先,看一下ReentrantLock和AQS之間的關(guān)系。

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

我們來看上面的圖。說白了,ReentrantLock內(nèi)部包含了一個AQS對象,也就是
AbstractQueuedSynchronizer類型的對象。這個AQS對象就是ReentrantLock可以實(shí)現(xiàn)加鎖和釋放鎖的關(guān)鍵性的核心組件。

ReentrantLock加鎖和釋放鎖的底層原理

好了,那么現(xiàn)在如果有一個線程過來嘗試用ReentrantLock的lock()方法進(jìn)行加鎖,會發(fā)生什么事情呢?

很簡單,這個AQS對象內(nèi)部有一個核心的變量叫做state,是int類型的,代表了加鎖的狀態(tài)。初始狀態(tài)下,這個state的值是0。

另外,這個AQS內(nèi)部還有一個關(guān)鍵變量,用來記錄當(dāng)前加鎖的是哪個線程,初始化狀態(tài)下,這個變量是null。

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

接著線程1跑過來調(diào)用ReentrantLock的lock()方法嘗試進(jìn)行加鎖,這個加鎖的過程,直接就是用CAS操作將state值從0變?yōu)?。

如果不知道CAS是啥的,請看上篇文章,《??Java8中的LongAdder類,大大提升CAS性能??!》。

如果之前沒人加過鎖,那么state的值肯定是0,此時線程1就可以加鎖成功。

一旦線程1加鎖成功了之后,就可以設(shè)置當(dāng)前加鎖線程是自己。所以大家看下面的圖,就是線程1跑過來加鎖的一個過程。

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

其實(shí)看到這兒,大家應(yīng)該對所謂的AQS有感覺了。說白了,就是并發(fā)包里的一個核心組件,里面有state變量、加鎖線程變量等核心的東西,維護(hù)了加鎖狀態(tài)。

你會發(fā)現(xiàn),ReentrantLock這種東西只是一個外層的API,內(nèi)核中的鎖機(jī)制實(shí)現(xiàn)都是依賴AQS組件的。

這個ReentrantLock之所以用Reentrant打頭,意思就是他是一個可重入鎖。

可重入鎖的意思,就是你可以對一個ReentrantLock對象多次執(zhí)行l(wèi)ock()加鎖和unlock()釋放鎖,也就是可以對一個鎖加多次,叫做可重入加鎖。

大家看明白了那個state變量之后,就知道了如何進(jìn)行可重入加鎖!

其實(shí)每次線程1可重入加鎖一次,會判斷一下當(dāng)前加鎖線程就是自己,那么他自己就可以可重入多次加鎖,每次加鎖就是把state的值給累加1,別的沒啥變化。

接著,如果線程1加鎖了之后,線程2跑過來加鎖會怎么樣呢?

我們來看看鎖的互斥是如何實(shí)現(xiàn)的?線程2跑過來一下看到,哎呀!state的值不是0啊?所以CAS操作將state從0變?yōu)?的過程會失敗,因?yàn)閟tate的值當(dāng)前為1,說明已經(jīng)有人加鎖了!

接著線程2會看一下,是不是自己之前加的鎖啊?當(dāng)然不是了,“加鎖線程”這個變量明確記錄了是線程1占用了這個鎖,所以線程2此時就是加鎖失敗。

給大家來一張圖,一起來感受一下這個過程:

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

接著,線程2會將自己放入AQS中的一個等待隊(duì)列,因?yàn)樽约簢L試加鎖失敗了,此時就要將自己放入隊(duì)列中來等待,等待線程1釋放鎖之后,自己就可以重新嘗試加鎖了

所以大家可以看到,AQS是如此的核心!AQS內(nèi)部還有一個等待隊(duì)列,專門放那些加鎖失敗的線程!

同樣,給大家來一張圖,一起感受一下:

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

接著,線程1在執(zhí)行完自己的業(yè)務(wù)邏輯代碼之后,就會釋放鎖!他釋放鎖的過程非常的簡單,就是將AQS內(nèi)的state變量的值遞減1,如果state值為0,則徹底釋放鎖,會將“加鎖線程”變量也設(shè)置為null!

整個過程,參見下圖:

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

接下來,會從等待隊(duì)列的隊(duì)頭喚醒線程2重新嘗試加鎖。

好!線程2現(xiàn)在就重新嘗試加鎖,這時還是用CAS操作將state從0變?yōu)?,此時就會成功,成功之后代表加鎖成功,就會將state設(shè)置為1。

此外,還要把“加鎖線程”設(shè)置為線程2自己,同時線程2自己就從等待隊(duì)列中出隊(duì)了。

最后再來一張圖,大家來看看這個過程。

扒一扒ReentrantLock以及AQS實(shí)現(xiàn)原理

總結(jié)

OK,本文到這里為止,基本借著ReentrantLock的加鎖和釋放鎖的過程,給大家講清楚了其底層依賴的AQS的核心原理。

基本上大家把這篇文章看懂,以后再也不會擔(dān)心面試的時候被問到:談?wù)勀銓QS的理解這種問題了。

其實(shí)一句話總結(jié)AQS就是一個并發(fā)包的基礎(chǔ)組件,用來實(shí)現(xiàn)各種鎖,各種同步組件的。它包含了state變量、加鎖線程、等待隊(duì)列等并發(fā)中的核心組件。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2025-06-04 01:20:00

2019-10-21 10:59:52

編程語言JavaC

2023-04-10 23:05:54

NacosOpenFeignRibbon

2019-09-10 07:29:44

2019-02-25 22:46:39

2024-12-04 13:54:19

pnpm存儲項(xiàng)目

2018-04-03 15:42:40

2023-01-30 22:10:12

BeanSpring容器

2020-01-15 15:29:52

InnoDB數(shù)據(jù)硬盤

2015-10-15 13:38:39

2015-08-18 09:12:54

app推廣渠道

2015-09-16 14:04:06

大數(shù)據(jù)巨頭

2015-09-21 10:07:31

2019-01-03 11:09:19

2015-09-16 14:11:47

2017-09-07 18:45:51

C#

2021-05-13 05:25:16

數(shù)據(jù)分析數(shù)分培訓(xùn)大數(shù)據(jù)

2022-09-30 09:40:39

智能汽車

2025-04-30 07:26:04

2015-12-15 09:51:42

大公司技術(shù)知乎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产精品18久久久久久麻辣| av免费观看大全| 成人精品毛片| 亚洲国产精品一区二区久| 你懂的在线看| 最新国产成人在线观看| 六月婷婷激情综合| 国产一区在线观看视频| 亚洲日本欧美在线| 青娱乐精品视频在线| 麻豆久久久av免费| 亚洲人www| 国产精品中出一区二区三区| 国产精品成人a在线观看| 国产精品久久久久久久app| 国产 日韩 欧美 综合 一区| 色综合久综合久久综合久鬼88| 日韩av首页| 在线视频精品一| 免费高清视频在线一区| 中文字幕久久精品| 日本一区二区三区中文字幕| 精品国产欧美一区二区三区成人| 国产极品久久久久久久久波多结野| 一区二区欧美久久| 成人交换视频| 国产调教一区二区三区| 国产精品激情av电影在线观看| 啪啪亚洲精品| 成人春色激情网| 欧美三级特黄| 日本电影一区二区三区| 噜噜噜在线观看免费视频日韩| 欧美一区二区三区成人久久片 | 毛片av在线播放| 粉嫩欧美一区二区三区高清影视| 国产freexxxx性播放麻豆| 成人av网站免费| 亚洲污视频在线观看| 黄色成人在线免费| 中文字幕在线播放| 亚洲精选在线观看| 日韩成人视屏| 成人精品一区二区三区| 欧美专区18| 日本一道本久久| 亚洲国产视频在线| 丝袜在线观看| 一区二区三区动漫| 亚洲人挤奶视频| 精品麻豆av| 99久久精品免费看| 激情丁香在线| 欧美一区三区二区| 日韩护士脚交太爽了| 国产精品久久视频| 青椒成人免费视频| 99re免费99re在线视频手机版| 欧美最猛性xxxxx直播| 日韩av电影资源网| 91老司机在线| 国产激情一区二区三区| 国产特级淫片免费看| 欧美一区二区精品久久911| 91嫩草国产线观看亚洲一区二区| 国产日韩精品在线观看| 久久成人av少妇免费| 老司机午夜激情| 亚洲成人在线视频播放| 亚洲+小说+欧美+激情+另类| 日韩理论片在线观看| 欧美国产国产综合| a篇片在线观看网站| 69av在线播放| 麻豆极品一区二区三区| 一本免费视频| 国产性猛交xxxx免费看久久| 久久精品一区二区不卡| 成人午夜视频在线观看免费| 欧洲国产伦久久久久久久| 91麻豆精品激情在线观看最新| 蜜桃网站成人| 国产精品伦理在线| 国产白丝在线观看| 国产精品国内视频| 波多野结衣亚洲一区| 成年人免费在线视频| 97久久精品人搡人人玩| 精品一区二区三区视频| 男女网站在线观看| 俺去啦;欧美日韩| 日韩电影免费在线看| 最近中文字幕mv第三季歌词 | 成人福利在线看| 91涩漫在线观看| 国产精品视频1区| 2024国产精品| heyzo在线播放| 精品乱子伦一区二区三区| 亚洲一级二级在线| 欧美激情网址| 精品视频无码一区二区三区| 日韩av在线一区| 老司机免费视频久久| 91欧美在线视频| 国产日韩av在线播放| 2020国产精品自拍| 视频一区二区中文字幕| 在线观看三级视频| 国内一区二区三区在线视频| 欧美不卡视频一区发布| 国产丝袜美腿一区二区三区| 四虎国产精品免费久久| 日本视频在线观看一区二区三区| 九九综合九九综合| 韩国精品免费视频| xvideos国产在线视频| 精品一区二区精品| 成人免费网址| 精品国产一区二区三区日日嗨| 亚洲精品大片www| 中文字幕一区二区三区四区久久 | 日本成人精品| www.av片| 日韩有码视频在线| 波多野结衣在线aⅴ中文字幕不卡| 夜鲁夜鲁夜鲁视频在线播放| 亚洲在线观看一区| 亚洲精品影视在线观看| 狠狠色2019综合网| 色综合亚洲图丝熟| 国内外成人激情免费视频| 日韩精品视频免费在线观看| 激情文学综合丁香| 欧美最新精品| 国产超级av在线| 久久这里有精品| 国产人成一区二区三区影院| 国产96在线亚洲| 快播av资源| 成人黄色影片在线| 欧美伊人久久大香线蕉综合69| 亚洲国产高清一区| 暖暖在线中文免费日本| 亚洲精品日韩在线观看| 亚洲欧美另类在线观看| 99在线热播精品免费| 999国产精品一区| 色网在线视频| 国产欧美日韩在线播放| 日韩欧美在线123| 国产宾馆实践打屁股91| 天堂久久一区| 黄色三级高清在线播放| 114国产精品久久免费观看| 日韩视频在线观看一区二区| 成人美女在线观看| 国产99亚洲| 成人欧美亚洲| 中国黄色录像片| 国模精品系列视频| 欧美综合亚洲图片综合区| 国产一区在线观看麻豆| 久久丝袜视频| 天堂аⅴ在线地址8| 成人免费观看cn| 成人精品久久一区二区三区| 亚洲精品成人网| 亚洲久草在线视频| 日韩av一级片| 欧美1区2区3区4区| 国产精品一二三在线| 色呦呦国产精品| 国产福利电影一区二区三区| 经典一区二区| 女人让男人操自己视频在线观看| 国产精品一区二区小说| 国产精品区一区二区三在线播放| 国产一区二区欧美日韩| 一区二区三区在线播放| 蜜臀久久99精品久久久久宅男| 红杏aⅴ成人免费视频| 久久综合网导航| 无码专区aaaaaa免费视频| 国产精品劲爆视频| 欧美mv和日韩mv国产网站| 中文天堂在线一区| 美女精品网站| 视频精品一区二区三区| av中文在线| 91最新在线观看| 日韩资源av在线| 国产精品久久久久久av福利| 日韩大片免费观看视频播放| 亚洲精品一二三| 国产精品一卡二卡在线观看| 欧美国产高潮xxxx1819| 久久的色偷偷| 国产在线天堂www网在线观看| 日中文字幕在线|