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

Java多線程環(huán)境下死鎖模擬

 更新時(shí)間:2021年12月12日 11:41:26   作者:bkpp976  
這篇文章主要介紹了模擬Java多線程環(huán)境下的死鎖,文章介紹一些死鎖的產(chǎn)生條件的相關(guān)資料,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對你有所幫助

1、死鎖產(chǎn)生的條件

  • 互斥:一次只有一個(gè)進(jìn)程可以使用一個(gè)資源。其他進(jìn)程不能訪問已分配給其他進(jìn)程的資源。
  • 不可搶占:不能搶占進(jìn)程已占有的資源
  • 請求和保持:當(dāng)一個(gè)進(jìn)程等待其他進(jìn)程釋放資源時(shí),繼續(xù)占有已經(jīng)分配的資源
  • 循環(huán)等待:存在一個(gè)封閉的進(jìn)程鏈,使得每個(gè)進(jìn)程至少占有此鏈中下一個(gè)進(jìn)程所需要的一個(gè)資源。

注意:前三個(gè)條件都只是死鎖存在的必要條件,但不是充分條件。第四個(gè)條件是充分條件。以上條件同樣適用于線程。

2、模擬多線程環(huán)境下死鎖的產(chǎn)生

/**
 * 死鎖產(chǎn)生的四個(gè)條件:互斥 請求和保持 不可搶占 循環(huán)等待
 * synchronized鎖住對象資源,保證互斥和不可搶占
 * 先持有一個(gè)資源,再去申請另一個(gè)資源->請求和保持
 */
public class DeadLock {

    // 模擬兩個(gè)資源
    public static Object lock1 = new Object();
    public static Object lock2 = new Object();

    // 先申請lock1資源,再去申請lock2資源
    public static void getLock1First(){
        synchronized (lock1){
            System.out.println("getlock1");
            getLock2();
        }
    }

    public static void getLock2(){
        synchronized (lock2) {
            System.out.println("lock1->lock2");
        }
    }

    // 先申請lock2資源,再申請lock1資源
    public static void getlock2First(){
        synchronized (lock2){
            System.out.println("getlock2");
            getLock1();
        }
    }

    public static void getLock1(){
        synchronized (lock1){
            System.out.println("lock2->lock1");
        }
    }

    public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                // 太難把控線程運(yùn)行的時(shí)機(jī)了 也有可能此線程執(zhí)行完了lock1->lock2的順序
                // 直接死循環(huán)一直運(yùn)行
                // 總會剛好遇到線程1剛好獲得lock1,線程2剛好獲得lock2
                while (true){
                    getLock1First();
                }
            }
        }.start();

        new Thread(){
            @Override
            public void run() {
                while (true){
                    getlock2First();
                }
            }
        }.start();
    }
}

死鎖:

3、死鎖的排查

先進(jìn)入jdk安裝的bin目錄,啟動命令行,輸入命令jps查看運(yùn)行的線程ID

死鎖檢測1:

執(zhí)行jstack -l 線程ID命令

死鎖檢測2:

可以看到Thread-1Thread-2都在相互等待對方持有的對象的monitor鎖釋放。

到此這篇關(guān)于Java多線程環(huán)境下死鎖模擬的文章就介紹到這了,更多相關(guān)Java多線程死鎖模擬內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis插入與批量插入返回ID的原理詳解

    mybatis插入與批量插入返回ID的原理詳解

    這篇文章主要給大家介紹了關(guān)于mybatis插入與批量插入返回ID的原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java中四種引用類型詳細(xì)介紹

    Java中四種引用類型詳細(xì)介紹

    這篇文章主要介紹了Java中四種引用類型詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • webservice實(shí)現(xiàn)springboot項(xiàng)目間接口調(diào)用與對象傳遞示例

    webservice實(shí)現(xiàn)springboot項(xiàng)目間接口調(diào)用與對象傳遞示例

    本文主要介紹了webservice實(shí)現(xiàn)springboot項(xiàng)目間接口調(diào)用與對象傳遞示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java中ArrayList和LinkedList的區(qū)別

    Java中ArrayList和LinkedList的區(qū)別

    ArrayList和LinkedList在這個(gè)方法上存在一定的性能差異,本文就介紹了Java中ArrayList和LinkedList的區(qū)別,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • SpringMVC @NotNull校驗(yàn)不生效的解決方案

    SpringMVC @NotNull校驗(yàn)不生效的解決方案

    這篇文章主要介紹了SpringMVC @NotNull校驗(yàn)不生效的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring5學(xué)習(xí)之基礎(chǔ)知識總結(jié)

    Spring5學(xué)習(xí)之基礎(chǔ)知識總結(jié)

    這篇文章主要介紹了Spring5學(xué)習(xí)之基礎(chǔ)知識總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java?Optional的判空操作詳解

    Java?Optional的判空操作詳解

    JAVA在1.8版本推出Optional,官方文檔將其描述為可能包含或不包含非空值的容器對象,目前Optional用于避免程序出現(xiàn)異常NullPointerException,感興趣的可以了解一下
    2022-09-09
  • JAVA線程同步實(shí)例教程

    JAVA線程同步實(shí)例教程

    這篇文章主要介紹了JAVA線程同步實(shí)例教程,在Java程序設(shè)計(jì)中有著非常廣泛的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • Java日志組件間關(guān)系詳解

    Java日志組件間關(guān)系詳解

    在本文里我們給大家整理了關(guān)于Java日志組件間關(guān)系相關(guān)基礎(chǔ)知識,需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • SpringBoot web靜態(tài)資源配置詳解

    SpringBoot web靜態(tài)資源配置詳解

    這篇文章主要介紹了SpringBoot web靜態(tài)資源配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論