最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

LockSupport是一個(gè)非常方便實(shí)用的線程阻塞工具,它可以在線程內(nèi)任意位置讓線程阻塞。和 Thread.suspend() 相比,它彌補(bǔ)了由于 resume() 在前發(fā)生,導(dǎo)致線程無法繼續(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è)場景,就是A同學(xué)想要去食堂打飯(買漢堡),那么這個(gè)A同學(xué)就相當(dāng)于我們的線程了。

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

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

情況3: 當(dāng)服務(wù)員打算去補(bǔ)餐( 調(diào)用unpark()方法 )的時(shí)候,發(fā)現(xiàn)取餐臺(tái)沒有漢堡(即:許可為【不可用】狀態(tà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)見如下所示:

代碼示例

示例一: 先執(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)文章

  • JAVA8之函數(shù)式編程Function接口用法

    JAVA8之函數(shù)式編程Function接口用法

    這篇文章主要介紹了JAVA8之函數(shù)式編程Function接口用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • java數(shù)組元素的引用實(shí)例講解

    java數(shù)組元素的引用實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java數(shù)組元素的引用實(shí)例講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-03-03
  • Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī)

    Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī)

    這篇文章主要介紹了Java如何通過枚舉實(shí)現(xiàn)有限狀態(tài)機(jī),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot鏈路追蹤skyworking的接入方法

    SpringBoot鏈路追蹤skyworking的接入方法

    在SpringBoot項(xiàng)目中引入SkyWalking進(jìn)行鏈路追蹤,需要下載探針jar包,配置logback.xml,設(shè)置啟動(dòng)變量,以實(shí)現(xiàn)服務(wù)調(diào)用監(jiān)控和錯(cuò)誤預(yù)警,本文給大家介紹SpringBoot鏈路追蹤skyworking的接入方法,感興趣的朋友一起看看吧
    2024-10-10
  • Java中computeIfAbsent的功能和語法小結(jié)

    Java中computeIfAbsent的功能和語法小結(jié)

    Java8的computeIfAbsent方法簡化了從Map中獲取值并處理默認(rèn)值的過程,減少了手動(dòng)null檢查的繁瑣,提高了代碼的簡潔性和可讀性,本文就來具體了解一下computeIfAbsent的使用,感興趣的可以了解一下
    2025-10-10
  • Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)輸出三角形實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • 深入Ajax代理的Java Servlet的實(shí)現(xiàn)詳解

    深入Ajax代理的Java Servlet的實(shí)現(xiàn)詳解

    本篇文章是對(duì)Ajax代理的Java Servlet的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java編程中的一些常見問題匯總

    Java編程中的一些常見問題匯總

    這篇文章主要介紹了Java編程中的一些常見問題匯總,本文總結(jié)的都是一些Java代碼中比較典型的錯(cuò)誤,需要的朋友可以參考下
    2014-09-09
  • Spring Cloud中關(guān)于Feign的常見問題總結(jié)

    Spring Cloud中關(guān)于Feign的常見問題總結(jié)

    這篇文章主要給大家介紹了Spring Cloud中關(guān)于Feign的常見問題,文中通過示例代碼介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • java案例實(shí)戰(zhàn)之字符串轉(zhuǎn)換為二進(jìn)制

    java案例實(shí)戰(zhàn)之字符串轉(zhuǎn)換為二進(jìn)制

    最近遇到個(gè)需求,要求編寫一個(gè)程序,從鍵盤錄入一個(gè)字符串,將字符串轉(zhuǎn)換為二進(jìn)制數(shù),下面這篇文章主要給大家介紹了關(guān)于java字符串轉(zhuǎn)換為二進(jìn)制的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

安庆市| 盐池县| 阿鲁科尔沁旗| 莱西市| 遂宁市| 盐源县| 盐津县| 南川市| 奈曼旗| 页游| 油尖旺区| 蕉岭县| 合山市| 金乡县| 龙口市| 余庆县| 南城县| 鱼台县| 巴塘县| 无为县| 五寨县| 漳州市| 鄯善县| 塘沽区| 苏尼特右旗| 中宁县| 崇礼县| 郁南县| 靖宇县| 利川市| 和平区| 乌鲁木齐县| 剑阁县| 昭通市| 兴安盟| 兴海县| 长治市| 广平县| 博湖县| 常山县| 新化县|