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

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

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

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

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

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

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

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

    // 模擬兩個資源
    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)行的時機(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)文章

  • java鏈?zhǔn)絼?chuàng)建json對象的實(shí)現(xiàn)

    java鏈?zhǔn)絼?chuàng)建json對象的實(shí)現(xiàn)

    本文主要介紹了java中如何通過最簡單的方式實(shí)現(xiàn)鏈?zhǔn)絼?chuàng)建json對象,解決創(chuàng)建json代碼臃腫的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 利用idea搭建SSM項(xiàng)目看這一篇就夠了

    利用idea搭建SSM項(xiàng)目看這一篇就夠了

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內(nèi)容),常作為數(shù)據(jù)源較簡單的web項(xiàng)目的框架,下面這篇文章主要給大家介紹了關(guān)于利用idea搭建SSM項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的實(shí)例代碼

    SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的實(shí)例代碼

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合WebSocket實(shí)現(xiàn)后端向前端發(fā)送消息的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Spring Security 在 Spring Boot 中的使用詳解【集中式】

    Spring Security 在 Spring Boot 中的使用詳解【集中式】

    這篇文章主要介紹了Spring Security 在 Spring Boot 中的使用【集中式】,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java實(shí)現(xiàn)Excel轉(zhuǎn)PDF的兩種方法詳解

    Java實(shí)現(xiàn)Excel轉(zhuǎn)PDF的兩種方法詳解

    使用具將Excel轉(zhuǎn)為PDF的方法有很多,在這里我給大家介紹兩種常用的方法:使用spire轉(zhuǎn)化PDF、使用jacob實(shí)現(xiàn)Excel轉(zhuǎn)PDF,分別應(yīng)對兩種不一樣的使用場景,需要的可以參考一下
    2022-01-01
  • Mybatis?Mapper中多參數(shù)方法不使用@param注解報錯的解決

    Mybatis?Mapper中多參數(shù)方法不使用@param注解報錯的解決

    這篇文章主要介紹了Mybatis?Mapper中多參數(shù)方法不使用@param注解報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • idea項(xiàng)目文件夾橫向顯示,縱向顯示的解決方法

    idea項(xiàng)目文件夾橫向顯示,縱向顯示的解決方法

    這篇文章主要介紹了idea項(xiàng)目文件夾橫向顯示,縱向顯示的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • java 示例講解循環(huán)語句的使用

    java 示例講解循環(huán)語句的使用

    順序結(jié)構(gòu)的程序語句只能被執(zhí)行一次。如果您想要同樣的操作執(zhí)行多次,就需要使用循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)就是在循環(huán)條件滿足的情況下,反復(fù)執(zhí)行特定代碼
    2022-04-04
  • Java8新特性之Collectors.joining()實(shí)例詳解

    Java8新特性之Collectors.joining()實(shí)例詳解

    在項(xiàng)目中我們常常要對list集合的數(shù)據(jù)做一些字符串拼接/處理等相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于Java8新特性之Collectors.joining()的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    智能 AI 代碼生成工具 Cursor 安裝和使用超詳細(xì)教程

    Cursor.so 是一個集成了 GPT-4 的國內(nèi)直接可以訪問的,優(yōu)秀而強(qiáng)大的免費(fèi)代碼生成器,可以幫助你快速編寫、編輯和討論代碼,這篇文章主要介紹了智能 AI 代碼生成工具 Cursor 安裝和使用介紹,需要的朋友可以參考下
    2023-05-05

最新評論

新闻| 都兰县| 高要市| 广西| 津南区| 布拖县| 周至县| 贡觉县| 阳春市| 诏安县| 民丰县| 平乐县| 铜陵市| 合水县| 海伦市| 扶风县| 北辰区| 昌乐县| 曲松县| 上高县| 从江县| 藁城市| 南涧| 汝州市| 华蓥市| 乐都县| 吴桥县| 阳城县| 宝山区| 诏安县| 保亭| 历史| 中西区| 呼伦贝尔市| 吉隆县| 塔河县| 平顶山市| 泸西县| 邳州市| 博白县| 逊克县|