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

java中線(xiàn)程掛起的幾種方式詳解

 更新時(shí)間:2019年08月22日 09:02:06   作者:357029540  
這篇文章主要介紹了java中線(xiàn)程掛起的幾種方式詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

在Java中使用線(xiàn)程的時(shí)候肯定會(huì)有線(xiàn)程掛起的這種情況出現(xiàn),在Java中提供了3種方式:suspend/resume、wait/notify,notifyAll、park/unpark。

1.suspend/resume

這種方式已經(jīng)在Java中被棄用,因?yàn)樗菀滓鹚梨i。在使用關(guān)鍵字synchronized的時(shí)候如

synchronized (this) { 
 Thread.currentThread().suspend(); 
} 

這個(gè)時(shí)候使用resume方法是無(wú)法喚醒線(xiàn)程的,還有一種情況是如果在resume方法之后才進(jìn)行suspend方法的調(diào)用,這個(gè)也是無(wú)法進(jìn)行suspend方法的喚醒的,因?yàn)檫@個(gè)事件發(fā)生的順序已經(jīng)造成了死鎖的出現(xiàn)。

2.wait/notify,notifyAll

這個(gè)是Java中常用的線(xiàn)程掛起方法,當(dāng)調(diào)用wait方法的時(shí)候線(xiàn)程會(huì)自動(dòng)的釋放掉占有的線(xiàn)程資源鎖,然后通過(guò)notify或notifyAll方法進(jìn)行wait方法的喚醒,因此在這個(gè)地方不會(huì)出現(xiàn)死鎖,當(dāng)時(shí)如suspend/resume中提到的,如果在notify或notifyAll方法之后在進(jìn)行wait操作,那么肯定也是會(huì)出現(xiàn)死鎖的。

這里必須說(shuō)明一下的是sleep方法,雖然它也能將線(xiàn)程掛起,但是它會(huì)產(chǎn)生InterruptedException異常,當(dāng)sleep一定時(shí)間后它將會(huì)自動(dòng)執(zhí)行后面的方法,也可以通過(guò)interrupt方法進(jìn)行主動(dòng)打斷sleep方法進(jìn)行線(xiàn)程喚醒。

3.park/unpark

park的字面量意思是指停車(chē)場(chǎng)的意思,使用park來(lái)掛起線(xiàn)程后需要調(diào)用unpark來(lái)進(jìn)行喚醒,這個(gè)沒(méi)有先后順序的區(qū)分,如果你提前進(jìn)行了unpark,然后在進(jìn)行park也是可以的,但是提前了的多個(gè)unpark只能看做是一個(gè)unpark,不能進(jìn)行重復(fù)疊加,如果再次park的話(huà)需要新的unpark來(lái)進(jìn)行喚醒操作,這個(gè)比如你在停車(chē)場(chǎng)進(jìn)行停車(chē)操作,你如果提前進(jìn)行了預(yù)約停車(chē),你在未進(jìn)入停車(chē)場(chǎng)之前都是可以進(jìn)行多次預(yù)約的,這所有的預(yù)約只扣一次錢(qián)(unpark),但是這所有的預(yù)約操作都看作是你這一次進(jìn)入停車(chē)場(chǎng)停車(chē)(park)的憑證,如果你離開(kāi)了通過(guò)繳費(fèi)憑證(unpark)一旦你想進(jìn)行下一次停車(chē),那么已經(jīng)使用過(guò)的預(yù)約都不能進(jìn)行作數(shù)了,你只能再次預(yù)約或者直接進(jìn)入停車(chē)場(chǎng),一旦要離開(kāi)只能再次繳費(fèi)(unpark)。

調(diào)用park/unpark使用的是LockSupport.park()/LockSupport.unpark()。

使用park/unpark的使用使用synchronized關(guān)鍵字也會(huì)出現(xiàn)死鎖的情況,因?yàn)樗⒉会尫啪€(xiàn)程所占用的鎖資源,所以使用的時(shí)候也需要注意。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?IOC?xml方式進(jìn)行工廠(chǎng)Bean操作詳解

    Spring?IOC?xml方式進(jìn)行工廠(chǎng)Bean操作詳解

    這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠(chǎng)Bean操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • 關(guān)于Spring?@Transactional事務(wù)傳播機(jī)制詳解

    關(guān)于Spring?@Transactional事務(wù)傳播機(jī)制詳解

    我們?nèi)粘9ぷ髦袠O少使用事務(wù)傳播級(jí)別,單純只是使用事務(wù)和rollbackfor拋出異常來(lái)解決事務(wù)問(wèn)題,但其實(shí)我們很多時(shí)候使用的是不正確的,或者說(shuō)會(huì)造成事務(wù)粒度過(guò)大,本文詳解一下事務(wù)傳播級(jí)別,也讓自己更好地處理事務(wù)問(wèn)題,需要的朋友可以參考下
    2023-08-08
  • logback-spring.xml的配置及示例詳解(直接復(fù)制粘貼可用)

    logback-spring.xml的配置及示例詳解(直接復(fù)制粘貼可用)

    在使用logback作為日志框架時(shí),可以創(chuàng)建一個(gè)名為logback-spring.xml的配置文件來(lái)自定義日志輸出的格式和方式,下面這篇文章主要給大家介紹了關(guān)于logback-spring.xml的配置及示例詳解的相關(guān)資料,文中的代碼直接復(fù)制粘貼可用,需要的朋友可以參考下
    2024-01-01
  • 利用Jackson解決Json序列化和反序列化問(wèn)題

    利用Jackson解決Json序列化和反序列化問(wèn)題

    Jackson是一個(gè)用于處理Json數(shù)據(jù)的Java庫(kù),它提供了一系列功能,包括Json序列化和反序列化,所以本文就來(lái)講講如何利用利用Jackson解決Json序列化和反序列化的問(wèn)題吧
    2023-05-05
  • Java多線(xiàn)程的用法詳解

    Java多線(xiàn)程的用法詳解

    本篇文章介紹了,在Java中多線(xiàn)程的用法詳解。需要的朋友參考下
    2013-04-04
  • vue3使用vue-diff工具來(lái)比較數(shù)據(jù)差異

    vue3使用vue-diff工具來(lái)比較數(shù)據(jù)差異

    這篇文章主要為大家詳細(xì)介紹了vue3如何使用vue-diff工具來(lái)比較數(shù)據(jù)差異,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Spring Data Neo4j Cypher查詢(xún)使用

    Spring Data Neo4j Cypher查詢(xún)使用

    本文介紹了Spring Data Neo4j Cypher查詢(xún)使用的幾種方法,包括使用Repository接口、動(dòng)態(tài)查詢(xún)、服務(wù)層組合、外部查詢(xún)文件和圖形化查詢(xún)構(gòu)建器, 感興趣的可以了解一下
    2024-11-11
  • Spring Boot命令行啟動(dòng)添加參數(shù)的三種方式

    Spring Boot命令行啟動(dòng)添加參數(shù)的三種方式

    在命令行中,常見(jiàn)的參數(shù)可以分為三類(lèi):選項(xiàng)參數(shù)、非選項(xiàng)參數(shù)和系統(tǒng)參數(shù),本文就來(lái)介紹一下Spring Boot命令行三種參數(shù)形式,感興趣的可以了解一下
    2023-09-09
  • SpringBoot?2.5.5整合輕量級(jí)的分布式日志標(biāo)記追蹤神器TLog的詳細(xì)過(guò)程

    SpringBoot?2.5.5整合輕量級(jí)的分布式日志標(biāo)記追蹤神器TLog的詳細(xì)過(guò)程

    分布式追蹤系統(tǒng)是一個(gè)最終的解決方案,如果您的公司已經(jīng)上了分布式追蹤系統(tǒng),這篇文章主要介紹了SpringBoot?2.5.5整合輕量級(jí)的分布式日志標(biāo)記追蹤神器TLog,需要的朋友可以參考下
    2022-10-10
  • SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法

    SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法

    這篇文章主要介紹了SpringBoot 入門(mén)教程之引入數(shù)據(jù)傳輸層的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

宣化县| 西丰县| 旺苍县| 宿迁市| 义马市| 烟台市| 绥芬河市| 乾安县| 枣强县| 灯塔市| 秀山| 深泽县| 昆明市| 夏津县| 土默特右旗| 卢湾区| 罗甸县| 固镇县| 临桂县| 盐城市| 康马县| 开封市| 大同市| 桂平市| 榆林市| 灌南县| 新乡县| 石楼县| 辽宁省| 永胜县| 五寨县| 交口县| 灌南县| 石阡县| 金寨县| 丰宁| 新兴县| 桐乡市| 孝感市| 东光县| 武清区|