死锁

死锁

死锁怎么产生的

两个或多个线程,互相拥有对方需要的资源,又互相抢占对方的资源,又不肯释放自己的资源,这就造成了死锁。

java中怎么造成死锁的

出现了锁的嵌套,解决办法就是不要写锁的嵌套

死锁代码实现如下

public class DeadLock {
    public static void main(String[] args) {
        Object o1 = new Object();
        Object o2 = new Object();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    //锁1
                    synchronized (o1){
                        //锁2
                        synchronized (o2){
                            System.out.println("张三吃饭");
                        }
                    }
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    //锁2
                    synchronized (o2){
                        //锁1
                        synchronized (o1){
                            System.out.println("李四吃饭");
                        }
                    }
                }
            }
        }).start();
    }
}

结果如下:

image-20230322142942203

可以看到输出了数据,但是程序并没有停止,但是也不再输出数据,这是就产生了死锁

posted @ 2023-03-24 21:25  七分酷  阅读(17)  评论(0编辑  收藏  举报