中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
准格尔旗| 扬州市| 长海县| 杭锦后旗| 山东| 扶绥县| 新宁县| 龙江县| 巧家县| 阜宁县| 特克斯县| 札达县| 漳浦县| 南投县| 荔浦县| 兴安盟| 安丘市| 商丘市| 隆回县| 宾川县| 华池县| 长治县| 通州区| 高邑县| 巴里| 蓬莱市| 易门县| 神木县| 松潘县| 香格里拉县| 宕昌县| 丰顺县| 集贤县| 华宁县| 莆田市| 黔西| 色达县| 侯马市| 黄龙县| 太和县| 玉溪市|