真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java并發(fā)之ReentrantLock類的示例分析-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關Java并發(fā)之ReentrantLock類的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺為眾多戶提供成都多線服務器托管 四川大帶寬租用 成都機柜租用 成都服務器租用。

ReentrantLock內(nèi)部由Sync類實例實現(xiàn)。

Java并發(fā)之ReentrantLock類的示例分析

Sync類定義于ReentrantLock內(nèi)部。

Java并發(fā)之ReentrantLock類的示例分析

Sync繼承于AbstractQueuedSynchronizer。

AbstractQueuedSynchronizer繼承于AbstractOwnableSynchronizer。

AbstractOwnableSynchronizer類中只定義了一個exclusiveOwnerThread變量,表示當前擁有的線程。

Java并發(fā)之ReentrantLock類的示例分析

除了Sync類,ReentrantLock內(nèi)部還定義了兩個實現(xiàn)類。

Java并發(fā)之ReentrantLock類的示例分析

NonfairSync是非公平鎖。FairSync 是公平鎖。

ReentrantLock兩個構(gòu)造方法如下:

Java并發(fā)之ReentrantLock類的示例分析

ReentrantLock的lock方法

Java并發(fā)之ReentrantLock類的示例分析

非公平鎖的lock方法

Java并發(fā)之ReentrantLock類的示例分析

compareAndSetState方法是一個CAS方法。該方法嘗試去更新對象內(nèi)的一個變量。變量期望是0,更新為1。

若更新成功,則將exclusiveOwnerThread變量設置為當前線程。然后lock方法會立刻返回。

若更新不成功,則調(diào)用acquire(1)。

Java并發(fā)之ReentrantLock類的示例分析

acquire方法中首先調(diào)用tryAcquire()再次嘗試更新。

非公平鎖的tryAcquire()方法如下:

Java并發(fā)之ReentrantLock類的示例分析

非公平鎖的tryAcquire()方法內(nèi)部調(diào)用nonfairTryAcquire方法如下:

Java并發(fā)之ReentrantLock類的示例分析

若tryAcquire()方法再次嘗試不成功。則首先會調(diào)用addWaiter()方法,將當前線程加入等待隊列。addWaiter方法返回一個Node節(jié)點。

Java并發(fā)之ReentrantLock類的示例分析

返回節(jié)點后,acquireQueued(node,1)會再次嘗試去做更新。

Java并發(fā)之ReentrantLock類的示例分析

若還是無法更新,則通過parkAndCheckInterrupt將線程掛起。

Java并發(fā)之ReentrantLock類的示例分析

ReentrantLock的unlock方法

Java并發(fā)之ReentrantLock類的示例分析

查看release()方法。

Java并發(fā)之ReentrantLock類的示例分析

若隊列的head不為空,且head的等待狀態(tài)不為0,則調(diào)用unparkSuccessor()方法。

unparkSuccessor()方法如下:

Java并發(fā)之ReentrantLock類的示例分析

使node的next從后向前遍歷,獲取到隊列中最前面的一個waitStatus小于0的線程。然后將節(jié)點上的線程繼續(xù)執(zhí)行。

關于“Java并發(fā)之ReentrantLock類的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


標題名稱:Java并發(fā)之ReentrantLock類的示例分析-創(chuàng)新互聯(lián)
標題路徑:http://weahome.cn/article/gshjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部