java多線程之四——LockSupport

本文基于java version "1.8.0_77"

LockSupport(java.util.concurrent.locks.LockSupport)是Java中底層類支竹,提供了基本的線程同步原語嚼锄。JUC中同步框架核心AQS(AbstractQueuedSynchronizer)听哭,就是通過使用LockSupport來實(shí)現(xiàn)線程的阻塞與喚醒的。我們先了解一下LockSupport類,為了解AQS做準(zhǔn)備。
LockSupport中的兩個(gè)核心方法:

  • public static void park()
  • public static void unpark(Thread thread)

park譯為“停車”,官方文檔意為:許可壮啊。為了方便理解,在這里我們可以理解為阻塞撑蒜,等待歹啼,掛起,而unpark我們理解為喚醒座菠,恢復(fù)狸眼。
這些字眼是不是很熟悉?我們在使用多線程的時(shí)候會調(diào)用object.wait()object.notify()辈灼,object.notifyall()來達(dá)到等待和喚醒的功能份企。此處我們可以比較著來學(xué)習(xí)。

與object的先wait巡莹,后notify方法不同的是司志,park與unpark無需擔(dān)心調(diào)用時(shí)序問題,可以先park降宅,后unpark骂远,也可以先park,后park腰根。還有一點(diǎn)需要注意激才,多次連續(xù)給一個(gè)線程下發(fā)許可,但是這中間并沒有消耗的情況下额嘿,只會保留一個(gè)許可瘸恼。(可以理解為許可的只有沒有之分,而沒有數(shù)量的多少)
當(dāng)線程A調(diào)用park()后册养,會申請一個(gè)許可證:

  • 如果沒有許可东帅,會阻塞當(dāng)前線程,直至有其他線程下發(fā)許可(LockSupport.unpark(線程A))球拦。
  • 如果此時(shí)已經(jīng)能夠有一個(gè)許可靠闭,則可以繼續(xù)往下執(zhí)行代碼。

我們來看下面的例子:

 public static void main(String[] args) {
        LockSupport.park();// 獲取許可
        System.out.println("END");
    }

運(yùn)行上述代碼坎炼,會發(fā)現(xiàn)愧膀,該代碼不會打印END。因?yàn)楫?dāng)前線程申請一個(gè)許可而沒有線程給他許可谣光,故一直阻塞檩淋,進(jìn)程不會關(guān)閉。

多線程中通信的例子:


吃雞.png

結(jié)果:


image.png

上圖中可以看到萄金,boyThread通過park阻塞線程狼钮,直至girlThread調(diào)用unpark喚醒碳柱。

看一個(gè)特殊例子:


image.png

結(jié)果:


image.png

可以看到,即便是已經(jīng)下發(fā)了4個(gè)許可熬芜,但是實(shí)際上只有一個(gè)許可,也就是說許可存在的個(gè)數(shù)只有0或1福稳。

其他方法:

  • void park(Object blocker)阻塞線程時(shí)添加附加信息涎拉,用來記錄線程是被誰堵塞的,程序出現(xiàn)問題時(shí)候的圆,通過線程監(jiān)控分析工具可以找出問題所鼓拧。
  • void parkNanos(long nanos)參數(shù)為阻塞超時(shí)時(shí)間,超時(shí)時(shí)間過后越妈,如果還沒有下發(fā)許可季俩,則自動喚醒
  • void parkNanos(Object blocker, long nanos)同上,方法重載
  • void parkUntil(long deadline)參數(shù)為阻塞截止時(shí)間梅掠,為絕對時(shí)間酌住,到達(dá)時(shí)間后,如果還沒有下發(fā)許可阎抒,則自動喚醒
  • void parkUntil(Object blocker, long deadline)同上酪我,方法重載

與Object中wait和notify的區(qū)別

  • 比wait/notify更加輕便靈活。LockSupport直接操作線程且叁,而wait/notify則是需要一個(gè)Object對線程進(jìn)行操作都哭。
  • 不依賴監(jiān)視器(鎖)。wait/notify需要在synchronized中進(jìn)行調(diào)用逞带,它首先需要獲取到鎖欺矫,才能進(jìn)行下面的操作。而LockSupport則是直接進(jìn)行調(diào)用展氓。(synchronized與wait/notify配合使用穆趴,ReentrantLock與Condition配合使用。而Condition就是使用LockSupport實(shí)現(xiàn)等待與喚醒的)

End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末带饱,一起剝皮案震驚了整個(gè)濱河市毡代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌勺疼,老刑警劉巖教寂,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異执庐,居然都是意外死亡酪耕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門轨淌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迂烁,“玉大人看尼,你說我怎么就攤上這事∶瞬剑” “怎么了藏斩?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長却盘。 經(jīng)常有香客問我狰域,道長,這世上最難降的妖魔是什么黄橘? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任兆览,我火速辦了婚禮,結(jié)果婚禮上塞关,老公的妹妹穿的比我還像新娘抬探。我一直安慰自己,他們只是感情好帆赢,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布小压。 她就那樣靜靜地躺著,像睡著了一般匿醒。 火紅的嫁衣襯著肌膚如雪场航。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天廉羔,我揣著相機(jī)與錄音溉痢,去河邊找鬼。 笑死憋他,一個(gè)胖子當(dāng)著我的面吹牛孩饼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竹挡,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼镀娶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了揪罕?” 一聲冷哼從身側(cè)響起梯码,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎好啰,沒想到半個(gè)月后轩娶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡框往,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年鳄抒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡许溅,死狀恐怖瓤鼻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贤重,我是刑警寧澤茬祷,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站并蝗,受9級特大地震影響牲迫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜借卧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筛峭。 院中可真熱鬧铐刘,春花似錦、人聲如沸影晓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挂签。三九已至疤祭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饵婆,已是汗流浹背勺馆。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侨核,地道東北人草穆。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像搓译,于是被迫代替她去往敵國和親悲柱。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容