亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

java中引發死鎖的情況有哪些

沐橙
150
2021-05-13 17:36:31
欄目: 編程語言

java中引發死鎖的情況有4種,分別是:1、交叉鎖引發程序死鎖;2、內存不足引發程序死鎖;3、一問一答式的數據交換引發死鎖;4、死循環引發的死鎖。

java中引發死鎖的情況有哪些

具體內容如下:

java引發死鎖的4種情況

1、交叉鎖引發程序死鎖:比如線程A持有R1的鎖等待R2的鎖,線程B持有R2的鎖等待R1的鎖。

2、內存不足:比如兩個線程T1和T2,T1已獲取10MB內存,T2獲取了15MB內存,T1和T2都需要獲取30MB內存才能工作,但是剩余可用的內存為10MB,這樣兩個線程都在等待彼此釋放內存資源。

3、一問一答式的數據交換:服務器開啟某個端口,等待客戶端訪問,客戶端發送請求后,服務器因某些原因錯過了客戶端請求,導致客戶端等待服務器回應,而服務器等待客戶端發送請求。

4、死循環引起的死鎖:比較常見,使用jstack等工具看不到死鎖,但是程序不工作,CPU占有率高,這種死鎖也叫系統假死,難以排查和重現。

死鎖相關實例

public class Main {

    private final Object MUTEX_READ = new Object();

    private final Object MUTEX_WRITE = new Object();

 

    public void read(){

        synchronized (MUTEX_READ){

            synchronized (MUTEX_WRITE){

            }

        }

    }

 

    public void write(){

        synchronized (MUTEX_WRITE){

            synchronized (MUTEX_READ){

            }

        }

    }

 

    public static void main(String[] args) throws InterruptedException {

        Main m = new Main();

        new Thread(()->{

            while (true){

                m.read();

            }

        }).start();

        new Thread(()->{

            while (true){

                m.write();

            }

        }).start();

    }

}


0
瓮安县| 祁门县| 桦甸市| 西林县| 育儿| 顺昌县| 芮城县| 新宾| 上林县| 繁峙县| 荥经县| 永丰县| 桃园县| 信丰县| 岑巩县| 长岭县| 图片| 颍上县| 揭东县| 报价| 汾西县| 黄石市| 宁南县| 碌曲县| 左权县| 抚州市| 巨野县| 胶州市| 定襄县| 客服| 石阡县| 奎屯市| 略阳县| 浦北县| 通许县| 东乌珠穆沁旗| 广州市| 龙海市| 阿勒泰市| 长白| 宿迁市|