Как я могу решить это тупиковое состояние? - PullRequest
0 голосов
/ 19 июня 2019

Я пытался создать тупиковую ситуацию.Я смог произвести это, используя приведенный ниже код.

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, я могу сделать это с помощью метода ожидания / уведомления?

Заранее спасибо.

...