首页 > 解决方案 > 我如何解决这种死锁情况?

问题描述

我试图产生一个死锁条件。我能够使用下面的代码生成它。

class MyCode {

  public static Object lock1  = new Object();
  public static Object lock2  = new Object();

    public static void main (String[] args) throws Exception{

    Thread t1 = new Thread(()-> {
      synchronized(lock1) {
        System.out.println("Took lock on object" + lock1);
        try {
        Thread.sleep(10000);
        }catch(Exception e) {}
        synchronized(lock2) {
          System.out.println("hello world 1....");      
        }
      }
    });

    Thread t2 = new Thread(()-> {
      synchronized(lock2) {
          System.out.println("Took lock on object" + lock2);
        try { 
          Thread.sleep(10000);
        }catch(Exception e) {}
        synchronized(lock1) {
          System.out.println("hello world 2....");      
        }
      }
    });
    t1.start();
    t2.start();
    System.out.println("Hello Java");
    }
}

我的要求是使用这 2 个线程执行代码。

我怎样才能做到这一点?在Java中有没有其他方法我可以使用等待/通知方法来做到这一点?

提前致谢。

标签: javamultithreadinglockingdeadlocksynchronized

解决方案


推荐阅读