死锁

何为死锁?
你持有一个锁,我也持有一个锁;然而你想要我的锁,我又想要你的锁,但我们都不能提供给对方锁,导致死锁了!
出现:一般同步中嵌套同步导致的。

  • 面试的时候,请给我写一个死锁程序:
class Test implements Runnable{
    private boolean flag;
    Test(boolean f){
        this.flag = f;
    }
    public void run(){
        if(flag){
            synchronized(MyLock.locka){
                System.out.println("if locka");
                synchronized(MyLock.lockb){
                    System.out.println("if lockb");
                }
            }
        }
        else{
            synchronized(MyLock.locka){
                System.out.println("else locka");
                synchronized(MyLock.lockb){
                    System.out.println("else lockb");
                }
            }
        }
    }
}
class MyLock{  //自己创建两个锁对象。
    static Object locka = new Object();
    static Object lockb = new Object();
}

class DealLockTest{
    public static void main(String[] args){
        Thread t1 = new Thread(new Test(true));
        Thread t2 = new Thread(new Test(false));
        t1.start();
        t2.start();

    }
}

程序的运行结果

image.png
  • 我的电脑没有出现死锁,我也很奇怪,原因以后再补上,现在我还无法理解。

你可能感兴趣的:(死锁)