举一个死锁的例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoye319/article/details/87376963

        大家工作中或者面试的时候,会碰到死锁的问题,大家都听说过两个线程互相等待,从而导致等死(锁)的情况吧,就是线程1持有对象1的锁,线程2持有对象2的锁,然后两者都等待对方释放其持有对象的锁,然后一直等,等到死亡。但是听是都听过,若有人让你写个例子呢???

下面就举个例子:

public class DieLock {

    public static Object t1 = new Object();
    public static Object t2 = new Object();

    public static void main(String[] args){
        new Thread(){
            @Override
            public void run(){
                synchronized (t1){
                    System.out.println("Thread1 get t1");

                    try {
                        Thread.sleep(100);
                    }catch (Exception e){

                    }

                    synchronized (t2){
                        System.out.println("Thread2 get t2");
                    }
                }
            }
        }.start();

        new Thread(){
            @Override
            public void run(){
                synchronized (t2){
                    System.out.println("Thread2 get t2");

                    try {
                        Thread.sleep(100);
                    }catch (Exception e){

                    }

                    synchronized (t1){
                        System.out.println("Thread2 get t1");
                    }
                }
            }
        }.start();
    }
}

运行的结果如下:

 两者一直等待对方释放持有的锁,然后一直等到死亡。。。

中间加睡眠时间,是为了防止线程一运行就获得两个对象的锁。

猜你喜欢

转载自blog.csdn.net/xiaoye319/article/details/87376963