JAVA并發(fā)包類 - ReentrantLock

說明:以下內容皆屬于個人對源碼的理解楣富,可能存在歧義奕谭、誤解、錯誤及理解不全面的情況尝蠕,還望指正

一、ReentrantLock介紹

ReentrantLock類是JDK1.5版本后出現(xiàn)的類载庭,這個類有什么作用看彼,能用來干嘛呢?首先看看Dog李對它的描述:ReentrantLock具有:與使用synchronized關鍵字的方法和語句的隱式監(jiān)視鎖相同的基本行為與語義囚聚,但是它也是具有可擴展的可重入的互斥鎖闲昭。

是不是一口氣理解不了?外國人說話就是費勁靡挥,注釋就不能一點一點的說明序矩,非得一口氣說完。大概意思就是ReentrantLocksynchronized實現(xiàn)的功能一樣跋破,但是ReentrantLock是可擴展的簸淀。

ReentrantLock對象鎖是被最后一次鎖定且尚未釋放鎖的線程所擁有,當一個線程調用lock()方法時毒返,如果鎖沒有被其它線程鎖擁有租幕,那么該線程將會獲得鎖,并且立即返回成功拧簸。如果該線程已擁有鎖劲绪,那么會將持有鎖的數(shù)量加1。通過ReentrantLockisHeldByCurrentThread()方法或者getHoldCount()方法可以判斷線程是否已獲得鎖盆赤。

二贾富、內部lock()方法實現(xiàn)

首先介紹一下ReentrantLock中定義的三個內部類:SyncNonfairSyncFairSync牺六。ReentrantLock中的lock()方法便是由Sync中定義的抽象方法lock()方法實現(xiàn)的颤枪。NonfairSyncFairSync分別繼承Sync,實現(xiàn)了具體的lock()方法淑际。源碼就不拷貝了畏纲,只做類的作用及lock()方法的描述:

  • Sync
    鎖同步控制的基礎類扇住,子類分為公平與非公平鎖。使用AQS(就是Sync的父類AbstractQueuedSynchronizer)狀態(tài)來表示鎖的持有數(shù)量盗胀。此外Sync內部還提供了釋放鎖艘蹋、獲取當前持有鎖的Thread對象等方法。
  • FairSync
    FairSync重寫了AQS的tryAcquire()方法票灰,因此在請求獲取鎖的實現(xiàn)上作了調整簿训,在請求獲取鎖時首先判斷AQS狀態(tài)(鎖的持有數(shù)量)是否為0。若為0:判斷請求隊列中該線程之前是否沒有在排隊的線程且是可以獲取鎖的狀態(tài)米间,滿足條件則將當前線程設為鎖的持有者强品。否則返回false。若不為0:則判斷鎖的持有者是否為當前線程屈糊。如果不是的榛,返回false。
  • NonfairSync
    首先根據(jù)CAS返回結果判斷是否可以獲取鎖逻锐,如果可以夫晌,則直接將當前線程設為鎖的持有者,否則中斷自己身執(zhí)行狀態(tài)昧诱,加入請求隊列獲取鎖直到獲取成功晓淀。

在實際應用中,具體使用哪種獲取鎖的方式可以在創(chuàng)建ReentrantLock類的實例時決定盏档。ReentrantLock中有兩個構造函數(shù)凶掰,一個是默認的構造函數(shù),一個是帶boolean參數(shù)的構造函數(shù)蜈亩。參數(shù)為true懦窘,表示使用公平鎖的方式,false為非公平鎖的方式稚配。ReentrantLock默認創(chuàng)建的是NonfairSync對象畅涂,因此獲取鎖時調用的也就是NonfairSync對象的lock()方法。

從上面的三個內部類可以了解到道川,非公平鎖的方式明顯比公平鎖的方式獲取鎖的速度要快(單線程下影響可以忽略不計)午衰,因此效率也比公平鎖的方式效率要高。ReentrantLock還提供了其它的獲取鎖的方式冒萄,所以在具體使用哪種方式獲取鎖可視情況而定臊岸。

三、其它方法

ReentrantLock還提供了lockInterruptibly()(中斷方式獲取鎖)宦言、tryLock()(無參和有參兩個方法扇单,無參方法類似于非公平方式鎖的lock()方法商模,前提條件是在鎖未被其它線程持有的情況下奠旺。如果鎖被其它線程持有蜘澜,則不會加入隊列等待獲取鎖,而是立即返回false响疚。帶參數(shù)的表示在指定時間內且當前線程未中斷的情況)及其它如釋放鎖鄙信、獲取鎖持有數(shù)量等方法。源碼忿晕、文檔看一下特別清晰装诡,就不單獨列舉說明了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末践盼,一起剝皮案震驚了整個濱河市鸦采,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咕幻,老刑警劉巖渔伯,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肄程,居然都是意外死亡锣吼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門蓝厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玄叠,“玉大人,你說我怎么就攤上這事拓提《潦眩” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵代态,是天一觀的道長狐粱。 經(jīng)常有香客問我,道長胆数,這世上最難降的妖魔是什么肌蜻? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮必尼,結果婚禮上蒋搜,老公的妹妹穿的比我還像新娘。我一直安慰自己判莉,他們只是感情好豆挽,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著券盅,像睡著了一般帮哈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锰镀,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天娘侍,我揣著相機與錄音咖刃,去河邊找鬼。 笑死憾筏,一個胖子當著我的面吹牛嚎杨,可吹牛的內容都是我干的。 我是一名探鬼主播氧腰,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼枫浙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了古拴?” 一聲冷哼從身側響起箩帚,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黄痪,沒想到半個月后膏潮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡满力,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年焕参,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油额。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡叠纷,死狀恐怖,靈堂內的尸體忽然破棺而出潦嘶,到底是詐尸還是另有隱情涩嚣,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布掂僵,位于F島的核電站航厚,受9級特大地震影響,放射性物質發(fā)生泄漏锰蓬。R本人自食惡果不足惜幔睬,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芹扭。 院中可真熱鬧麻顶,春花似錦、人聲如沸舱卡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轮锥。三九已至矫钓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背新娜。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工赵辕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杯活。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓匆帚,卻偏偏與公主長得像熬词,于是被迫代替她去往敵國和親旁钧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容

  • 作者: 一字馬胡 轉載標志 【2017-11-03】 更新日志 前言 在java中互拾,鎖是實現(xiàn)并發(fā)的關鍵組件歪今,多個...
    一字馬胡閱讀 44,165評論 1 32
  • 我們之前介紹過synchronized關鍵字實現(xiàn)程序的原子性操作,它的內部也是一種加鎖和解鎖機制颜矿,是一種聲明式的編...
    Single_YAM閱讀 393評論 0 4
  • 一寄猩、前言 借用Java并發(fā)編程實踐中的話"編寫正確的程序并不容易,而編寫正常的并發(fā)程序就更難了"骑疆,相比于順序執(zhí)行的...
    運維開發(fā)筆記閱讀 339評論 0 2
  • ReadWriteLock 從這一節(jié)開始介紹鎖里面的最后一個工具:讀寫鎖(ReadWriteLock)田篇。 Reen...
    raincoffee閱讀 649評論 0 1
  • 怕什么來什么。 “毀童年”這件事箍铭,神通廣大的“朝陽區(qū)群眾”又做到了泊柬。 跟Sir今天說的這片殊途同歸。 而且诈火,說的都...
    Sir電影閱讀 16,441評論 2 34