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

Java多線程產(chǎn)生死鎖的必要條件

 更新時(shí)間:2019年01月07日 12:02:42   作者:李燦輝  
今天小編就為大家分享一篇關(guān)于Java多線程產(chǎn)生死鎖的必要條件,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

線程死鎖是指由于兩個(gè)或者多個(gè)線程互相持有對(duì)方所需要的資源,導(dǎo)致這些線程處于等待狀態(tài),無法前往執(zhí)行。當(dāng)線程進(jìn)入對(duì)象的synchronized代碼塊時(shí),便占有了資源,直到它退出該代碼塊或者調(diào)用wait方法,才釋放資源,在此期間,其他線程將不能進(jìn)入該代碼塊。當(dāng)線程互相持有對(duì)方所需要的資源時(shí),會(huì)互相等待對(duì)方釋放資源,如果線程都不主動(dòng)釋放所占有的資源,將產(chǎn)生死鎖。

死鎖是操作系統(tǒng)里里面的一個(gè)重要的概念,死鎖通常發(fā)生在并發(fā)的場(chǎng)景里。

死鎖是多個(gè)進(jìn)程或線程,彼此爭(zhēng)搶資源而陷入僵局的一種情況。

在筆者參加的多次面試中,發(fā)現(xiàn)不少候選人雖然大概知道死鎖是一種因?yàn)闋?zhēng)搶資源引起的問題,但真的要寫一個(gè)死鎖的例子的話,還是有不少候選人不知道該如何下手。

其實(shí),真正理清楚了死鎖產(chǎn)生的必要的條件,寫出一個(gè)死鎖的例子并不困難。那么,就java的多線程而言,產(chǎn)生死鎖有哪些必要條件呢?

  • 1,必須有2個(gè)或以上的線程。一個(gè)線程是不會(huì)產(chǎn)生死鎖的,它頂多產(chǎn)生等待。
  • 2,必須有2個(gè)臨界資源,即,必須有2個(gè)鎖。這也是死鎖產(chǎn)生的必要的條件。當(dāng)只有一個(gè)臨界資源,或者說只有一個(gè)鎖時(shí),當(dāng)一個(gè)線程獲取了鎖,另一個(gè)線程雖然暫時(shí)無法獲取鎖,但它至多也就是需要進(jìn)行等待。而不會(huì)陷入死鎖。
  • 3,兩個(gè)線程,每個(gè)線程都獲取了其中的一個(gè)鎖,但為了完成工作,還需對(duì)方的另一個(gè)鎖。這種情況下,才會(huì)產(chǎn)生死鎖。這種情況也稱為循環(huán)等待。
  • 4,不可剝奪。

以上即為死鎖產(chǎn)生的必要條件。

避免死鎖可以概括成三種方法:

  • 固定加鎖的順序(針對(duì)鎖順序死鎖)
  • 開放調(diào)用(針對(duì)對(duì)象之間協(xié)作造成的死鎖)
  • 使用定時(shí)鎖-->tryLock()

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Java中HashMap集合的常用方法詳解

    Java中HashMap集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中HashMap集合的常用方法詳解,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • Spring Cloud Stream微服務(wù)消息框架原理及實(shí)例解析

    Spring Cloud Stream微服務(wù)消息框架原理及實(shí)例解析

    這篇文章主要介紹了Spring Cloud Stream微服務(wù)消息框架原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 實(shí)例詳解SpringBoot默認(rèn)的JSON解析方案

    實(shí)例詳解SpringBoot默認(rèn)的JSON解析方案

    JSON數(shù)據(jù)現(xiàn)在是我們開發(fā)中用的最多的,百分之九十的數(shù)據(jù)都是通過JSON方式進(jìn)行傳輸,下面這篇文章主要給大家介紹了關(guān)于SpringBoot默認(rèn)的JSON解析方案的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    解決lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的問題

    這篇文章主要介紹了lambda表達(dá)式內(nèi)出現(xiàn)異常無法throw拋出的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring cloud無縫集成Feign的使用示例詳解

    Spring cloud無縫集成Feign的使用示例詳解

    這篇文章主要為大家介紹了Spring cloud無縫集成Feign的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 一文詳解jvm中的引用類型

    一文詳解jvm中的引用類型

    在Java中對(duì)象以引用來指向JVM的內(nèi)存區(qū)塊,這里我們總結(jié)了強(qiáng)引用、軟引用、弱引用和假象引用(幽靈引用),下面這篇文章主要給大家介紹了關(guān)于jvm中引用類型的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Java中常見的日期操作(取值、轉(zhuǎn)換、加減、比較)

    Java中常見的日期操作(取值、轉(zhuǎn)換、加減、比較)

    本文給大家介紹java中常見的日期操作,日期取值、日期轉(zhuǎn)換、日期加減、日期比較,對(duì)java日期操作相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Java 中的 this 和 super 區(qū)別

    Java 中的 this 和 super 區(qū)別

    這篇文章主要介紹了Javathis與super本質(zhì)區(qū)別,this與super是類實(shí)例化時(shí)通往Object類通道的打通者;this和super在程序中由于其經(jīng)常被隱式的使用而被我們忽略,但是理解其作用和使用規(guī)范肯定是必須的。接下來將詳述this與super的作用和區(qū)別,需要的朋友可以參考一下
    2021-11-11
  • 詳解SpringBoot 添加對(duì)JSP的支持(附常見坑點(diǎn))

    詳解SpringBoot 添加對(duì)JSP的支持(附常見坑點(diǎn))

    這篇文章主要介紹了詳解SpringBoot 添加對(duì)JSP的支持(附常見坑點(diǎn)),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    本篇文章中主要介紹了Spring中的兩種代理JDK和CGLIB的區(qū)別淺談,詳解的介紹了JDK和CGLIB的原理和方法,有需要的朋友可以了解一下
    2017-04-04

最新評(píng)論