欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程阻塞工具LockSupport用法詳解

 更新時(shí)間:2023年08月18日 09:32:37   作者:爪哇繆斯  
Java中的LockSupport是一個(gè)用于線程同步的工具類,它提供了一種基于線程的阻塞和喚醒機(jī)制,LockSupport可以讓線程在特定條件下阻塞掛起,等待其他線程發(fā)送信號(hào)來(lái)喚醒它,本文將通過(guò)一個(gè)小案例給大家介紹一下LockSupport怎么用,讓你永遠(yuǎn)記住它

概述

LockSupport是一個(gè)非常方便實(shí)用的線程阻塞工具,它可以在線程內(nèi)任意位置讓線程阻塞。和 Thread.suspend() 相比,它彌補(bǔ)了由于 resume() 在前發(fā)生,導(dǎo)致線程無(wú)法繼續(xù)執(zhí)行的情況。和 Object.wait() 方法相比,它不需要先獲得某個(gè)對(duì)象的鎖,也不會(huì)拋出InterruptedException異常。

park() 可以阻塞當(dāng)前線程,其中每一個(gè)線程都有一個(gè)許可,該許可默認(rèn)為[不可用] 。

如果該許可是 [可用] 狀態(tài),那么 park() 方法會(huì)立即返回,消費(fèi)這個(gè)許可,將該許可變更為 [不可用] 狀態(tài),流程代碼可以繼續(xù)執(zhí)行。

如果該許可是 [不可用] 狀態(tài),那么 park() 方法將會(huì)阻塞; unpark() 方法,會(huì)將指定線程的一個(gè)許可變?yōu)?[可用] 狀態(tài);

舉例解釋

為了便于大家理解,我們可以舉一個(gè)場(chǎng)景,就是A同學(xué)想要去食堂打飯(買漢堡),那么這個(gè)A同學(xué)就相當(dāng)于我們的線程了。

情況1: 當(dāng)A同學(xué)去取漢堡( 調(diào)用park()方法 )的時(shí)候,如果取餐臺(tái)沒(méi)有漢堡(即:許可為【不可用】狀態(tài)),則他需要等待(線程阻塞);

情況2: 當(dāng)A同學(xué)去取漢堡( 調(diào)用park()方法 )的時(shí)候,如果取餐臺(tái)有漢堡(即:許可為【可用】狀態(tài)),則他拿走漢堡去吃飯,取餐臺(tái)又沒(méi)有漢堡了(許可從【可用】變?yōu)椤静豢捎谩繝顟B(tài))

情況3: 當(dāng)服務(wù)員打算去補(bǔ)餐( 調(diào)用unpark()方法 )的時(shí)候,發(fā)現(xiàn)取餐臺(tái)沒(méi)有漢堡(即:許可為【不可用】狀態(tài)),則他去后廚拿來(lái)一個(gè)漢堡,放到取餐臺(tái)上(許可從【不可用】變?yōu)椤究捎谩繝顟B(tài))

情況4: 當(dāng)服務(wù)員打算去補(bǔ)餐( 調(diào)用unpark()方法 )的時(shí)候,發(fā)現(xiàn)取餐臺(tái)已經(jīng)有漢堡了(即:許可為【可用】狀態(tài)),則他就去做別的事情了

為了方便大家理解,請(qǐng)見(jiàn)如下所示:

代碼示例

示例一: 先執(zhí)行 unpark() 方法再執(zhí)行 park() 方法,也不會(huì)造成永久卡死線程。如下所示:

示例二: LockSupport.park()還能支持中斷。但是它不會(huì)拋InterruptedException異常。它只會(huì)默默的返回,但是我們可以從Thread.interrupted()等方法獲得中斷標(biāo)記。

file

到此這篇關(guān)于Java線程阻塞工具LockSupport用法詳解的文章就介紹到這了,更多相關(guān)Java LockSupport用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中轉(zhuǎn)換器設(shè)計(jì)模式深入講解

    Java中轉(zhuǎn)換器設(shè)計(jì)模式深入講解

    這篇文章主要給大家介紹了關(guān)于Java中轉(zhuǎn)換器設(shè)計(jì)模式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java設(shè)計(jì)模式之備忘錄模式

    Java設(shè)計(jì)模式之備忘錄模式

    這篇文章主要介紹了Java設(shè)計(jì)模式之備忘錄模式,備忘錄模式(Memento Pattern),屬于行為型設(shè)計(jì)模式,目的是用于保存一個(gè)對(duì)象在某一時(shí)刻的狀態(tài),以便于在將來(lái)某個(gè)時(shí)刻根據(jù)此狀態(tài)恢復(fù)該對(duì)象,需要的朋友可以參考下
    2023-12-12
  • SpringBoot Java后端實(shí)現(xiàn)okhttp3超時(shí)設(shè)置的方法實(shí)例

    SpringBoot Java后端實(shí)現(xiàn)okhttp3超時(shí)設(shè)置的方法實(shí)例

    Okhttp的使用沒(méi)有httpClient廣泛,網(wǎng)上關(guān)于Okhttp設(shè)置代理的方法很少,下面這篇文章主要給大家介紹了關(guān)于SpringBoot Java后端實(shí)現(xiàn)okhttp3超時(shí)設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • WebDriver中實(shí)現(xiàn)對(duì)特定的Web區(qū)域截圖方法

    WebDriver中實(shí)現(xiàn)對(duì)特定的Web區(qū)域截圖方法

    這篇文章主要介紹了WebDriver中實(shí)現(xiàn)對(duì)特定的Web區(qū)域截圖方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • java.lang.UnsupportedOperationException分析及解決辦法

    java.lang.UnsupportedOperationException分析及解決辦法

    日常開發(fā)中我遇到j(luò)ava.lang.UnsupportedOperationException:異常兩次了,下面這篇文章主要給對(duì)大家介紹了關(guān)于java.lang.UnsupportedOperationException分析及解決辦法,需要的朋友可以參考下
    2024-03-03
  • SpringBoot中使用JWT的實(shí)戰(zhàn)

    SpringBoot中使用JWT的實(shí)戰(zhàn)

    本文主要介紹了SpringBoot中使用JWT的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java多線程通信wait()和notify()代碼實(shí)例

    Java多線程通信wait()和notify()代碼實(shí)例

    這篇文章主要介紹了Java多線程通信wait()和notify()代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于Java實(shí)現(xiàn)掃碼登錄的示例代碼

    基于Java實(shí)現(xiàn)掃碼登錄的示例代碼

    相信大家對(duì)二維碼都不陌生,生活中到處充斥著掃碼登錄的場(chǎng)景,如登錄網(wǎng)頁(yè)版微信、支付寶等。本文將利用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)易版掃碼登錄的 Demo,需要的可以參考一下
    2022-04-04
  • Java實(shí)現(xiàn)5種負(fù)載均衡算法(小結(jié))

    Java實(shí)現(xiàn)5種負(fù)載均衡算法(小結(jié))

    負(fù)載均衡是將客戶端請(qǐng)求訪問(wèn),通過(guò)提前約定好的規(guī)則轉(zhuǎn)發(fā)給各個(gè)server,本文主要介紹了Java實(shí)現(xiàn)5種負(fù)載均衡算法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-06-06
  • Java的后臺(tái)文件夾下文件的遍歷完整代碼

    Java的后臺(tái)文件夾下文件的遍歷完整代碼

    這篇文章主要介紹了Java的后臺(tái)文件夾下文件的遍歷完整代碼,首先分享了java中遍歷一個(gè)文件夾里邊的所有文件,然后介紹了用Java遍歷一個(gè)文件夾并獲取它里面的所有內(nèi)容詳細(xì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論