什麼是死鎖?死鎖的產生必須滿足的條件是什麼?手寫一個死鎖吧-Java

死鎖指的是兩個或者多個線程,因爭奪資源而造成的相互等待的情況。

產生死鎖的原因有主要還是系統資源分配不均(系統資源不足)。

死鎖有4個必須滿足的條件:

1. 請求保持條件。至少得有一個線程已經拿到了A資源,又去請求B資源

2. 不可剝奪。拿到資源後,不能被強行奪走。

3.互斥條件。使用的資源至少要有一個是不能共享的,需要互斥訪問。

4.循環等待條件。A等B,B等C

也就是說只要破壞這四個條件中的任何一個,死鎖便不成立。

public class DeadLock implements Runnable{
    boolean flag ;
    static Object o1 = new Object();
    static Object o2 = new Object();
    public DeadLock(boolean flag){
        this.flag = flag;
    }
    
    public static void main(String[] args){
        Thread t1 = new Thread(new DeadLock(true));
        Thread t2 = new Thread(new DeadLock(false));
        t1.start();
        t2.start();
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(this.flag){
            synchronized(o1){
                try{
                    System.out.println("t1 拿到o1了");
                    Thread.sleep(100);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                synchronized(o2){
                    System.out.println("t1 拿到o2了");
                }
            }
        }else{
            synchronized(o2){
                try{
                    System.out.println("t2 拿到o2了");
                    Thread.sleep(100);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                synchronized(o1){
                    System.out.println("t2 拿到o1了");
                }
            }
        }
    }

}

輸出是這樣,然後便卡着不動了。

t1 拿到o1了
t2 拿到o2了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章