代码出现死锁以及解决方案

 
public class Lock1 implements Runnable{


    @Override
    public void run() {
        System.out.println("lock1 running");

        while (true){
            try {
                synchronized (LockUtils.obj1){
                    System.out.println("lock1 锁 obj1");

                    Thread.sleep(3000);
                    synchronized (LockUtils.obj2) {
                        System.out.println("lock1 锁 obj2");

                    }
                }


      }catch (Exception e){
            e.getMessage();
        }

        }
    }
}

  ---->

public class Lock2  implements Runnable{

    @Override
    public void run() {
        System.out.println("lock 2 running");
        try {
            while (true){

                synchronized (LockUtils.obj2){
                    System.out.println("lock2 锁 obj2");
                    Thread.sleep(3000);
                    synchronized (LockUtils.obj1){
                        System.out.println("lock2 锁 obj1");
                    }
                }
            }
        }catch (Exception e){
            e.getMessage();
        }


    }
}

 

 

public class LockUtils {
    public static String obj1="obj1";
    public static String obj2="obj2";

}

 

public class Main {
    public static void main(String[] args) {
          Thread a = new Thread(new Lock1());
          Thread b = new Thread(new Lock2());
          a.start();
          b.start();
    }
}

  

 

 程序不结束,还在运行,代码不继续打印

 -----------------------------------------------------------------------------------------

产生死锁的四个必要条件:
1.互斥,共享资源x和y只能被一个线程占用;
2.占有且等待,线程01已经取得共享资源x,在等待共享资源y的时候,不释放共享资源x;
3.不可抢占,其他线程不能强行抢占线程01占有的资源;
4.循环等待,线程01等待线程02占有的资源,线程02,等待线程01占有的资源。

--------------------------------------------------------------------------------------------------------------------------------------

 

互斥: 一次性 申请所有资源,不存在等待问题了。
不可抢占: 如果申请不到资源,在一定时间后,主动释放抢占的资源,这样就解决了不可抢占的条件。
循环等待:

posted @ 2022-03-23 17:53  三号小玩家  阅读(219)  评论(0编辑  收藏  举报
Title
三号小玩家的 Mail: 17612457115@163.com, 联系QQ: 1359720840 微信: QQ1359720840