欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何理解ReentrantLock非公平鎖源碼

這篇文章主要講解了“如何理解ReentrantLock非公平鎖源碼”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何理解ReentrantLock非公平鎖源碼”吧!

十年品牌的成都網(wǎng)站建設(shè)公司,上1000家企業(yè)網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn).價(jià)格合理,可準(zhǔn)確把握網(wǎng)頁(yè)設(shè)計(jì)訴求.提供定制網(wǎng)站建設(shè)、購(gòu)物商城網(wǎng)站建設(shè)、小程序制作、成都響應(yīng)式網(wǎng)站建設(shè)公司等服務(wù),我們?cè)O(shè)計(jì)的作品屢獲殊榮,是您值得信賴的專業(yè)網(wǎng)站設(shè)計(jì)公司。

1.鎖

java中,加鎖的方式

  1. synchronized,這個(gè)是 java 底層實(shí)現(xiàn)的,也就是 C 語(yǔ)言實(shí)現(xiàn)的。

  2. . lock,這個(gè)是 java.util.concurrent  包下面的,是 java語(yǔ)言實(shí)現(xiàn)的。

2.ReentrantLock

ReentrantLock 是 Lock 的一種實(shí)現(xiàn),是一種可重入的公平或非公平鎖。默認(rèn)是非公平鎖。

2.1 Lock的創(chuàng)建

首先看下鎖的創(chuàng)建和使用代碼:

//創(chuàng)建鎖 Lock lock  = new ReentrantLock(); //加鎖 lock.lock(); //釋放鎖 lock.unlock();

然后看下創(chuàng)建的是 ReentrantLock 的構(gòu)造函數(shù):

public ReentrantLock() {     sync = new NonfairSync(); }

NonfairSync 就是非公平鎖。所以 ReentrantLock 默認(rèn)是非公平鎖的實(shí)現(xiàn)

2.2 lock()

加鎖的邏輯就比較復(fù)雜了,因?yàn)榇嬖诰€程競(jìng)爭(zhēng)。所以有兩種情況,一種是競(jìng)爭(zhēng)到鎖的處理,一種是沒(méi)有競(jìng)爭(zhēng)到鎖的處理。

首先我們還是來(lái)看下 lock() 方法,因?yàn)樽罱K是非公平的實(shí)現(xiàn),所以直接看 NonfairSync 里面的 lock 方法。

final void lock() {     if (compareAndSetState(0, 1))         setExclusiveOwnerThread(Thread.currentThread());     else         acquire(1); }

2.3 沒(méi)有獲取到鎖的邏輯 acquire()

直接上代碼:

public final void acquire(int arg) {     if (!tryAcquire(arg) &&         acquireQueued(addWaiter(Node.EXCLUSIVE), arg))         selfInterrupt(); }

還是3個(gè)方法,阿粉一個(gè)一個(gè)的說(shuō)。

tryAcquire(arg) ,還是先看代碼在分析。

final boolean nonfairTryAcquire(int acquires) {     final Thread current = Thread.currentThread();     int c = getState();     if (c == 0) {         if (compareAndSetState(0, acquires)) {             setExclusiveOwnerThread(current);             return true;         }     }     else if (current == getExclusiveOwnerThread()) {         int nextc = c + acquires;         if (nextc < 0) // overflow             throw new Error("Maximum lock count exceeded");         setState(nextc);         return true;     }     return false; }

a. 獲取 state  ,如果等于0,說(shuō)明之前獲得鎖的線程已經(jīng)釋放了,那么這個(gè)線程就會(huì)再次去競(jìng)爭(zhēng)鎖,這就是非公平鎖的體現(xiàn),如果是公平鎖,是沒(méi)有這個(gè)判斷的。

b. 如果前一個(gè)獲得鎖的線程沒(méi)有釋放鎖,那么就判斷是否是同一個(gè)線程,是的話就會(huì)將 state 加 1。這個(gè)就是重入鎖的體現(xiàn)。

c. 如果都不滿足,那么返回 false。

acquireQueued(addWaiter(Node.EXCLUSIVE), arg))  ,再次獲取鎖沒(méi)有成功,并且又不是可重入鎖,那么就存入一個(gè)阻塞隊(duì)列里面。里面還有一點(diǎn)邏輯,就不展開了,有興趣可以自己看下。

selfInterrupt(); 這個(gè)是當(dāng)前線程的中斷標(biāo)志,作用就是在線程在阻塞的是否,客戶端通過(guò)調(diào)用了中斷線程的方法  interrupt(),那么該線程被喚醒的時(shí)候,就會(huì)有響應(yīng)的處理。具體要看這個(gè)線程 run 方法里面的代碼邏輯。

2.4 unlock()

protected final boolean tryRelease(int releases) {     int c = getState() - releases;     if (Thread.currentThread() != getExclusiveOwnerThread())         throw new IllegalMonitorStateException();     boolean free = false;     if (c == 0) {         free = true;         setExclusiveOwnerThread(null);     }     setState(c);     return free; }

state - 1,如果大于0,說(shuō)明釋放的是重入鎖,只需要修改 state 就行了

如果等于0,說(shuō)明要釋放鎖,釋放鎖首先需要把獨(dú)占線程設(shè)置為null,再把state設(shè)置為0。

感謝各位的閱讀,以上就是“如何理解ReentrantLock非公平鎖源碼”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何理解ReentrantLock非公平鎖源碼這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:如何理解ReentrantLock非公平鎖源碼
文章路徑:http://aaarwkj.com/article48/ggphep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、面包屑導(dǎo)航用戶體驗(yàn)、微信公眾號(hào)網(wǎng)站改版、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
国产91香蕉在线精品| 亚洲一区二区三区在线播| 欧美丰满老妇性猛交| 亚洲国产精品久久久精品| 一区二区三区日韩激情| 亚洲av偷拍一区二区三区不卡| 久久亚洲第一视频网站| 欧美日韩另类综合一区| 欧美日韩亚洲高清专区| 日韩精品综合成人欧美| 欧洲精品久久久久久| 欧美老熟妇一区三区精品| 国产一区二区三区不卡av| 亚洲国产精品自拍视频| 97视频精品在线播放| 人人妻人人澡人人爽人人dvd| 免费成人激情在线电影| 无遮挡国产精品一级二级三级视频| 国产精品久久99一区| 蜜桃人妻av一区二区三区| 日本精品一级免费在线| 国产麻豆91在线视频| 日本女优中文字幕久久| 精品毛片av一区二区三区| 人妻天天爽夜夜爽欧美色| 黄色av手机在线观看| 亚洲熟女av综合网五月| 青青草原在线影视一区| 天天天干夜夜添狠操美女| 中文字幕国产精品经典三级| 精品国产一区二区av麻豆| 自拍偷拍亚洲精品偷一| 91精品久久久久久| 国产黄色看三级91大片| 国产91香蕉在线精品| 美女午夜福利一区二区| 亚洲男女内射在线视频| 欧美三级在线完整版免费| 成人黄色动漫在线播放| 亚洲成人不卡一区二区三区 | 日韩欧美国产成人在线观看|