Не могу понять! Запускаю в отдельном потоке метод someMethodWithSynchronizedBlocks на объекте
Runnable runnable = new Runnable() {
           @Override
           public void run() {
               try {
                   solution.(o1,o2);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }

           }
       };
       Thread thread = new Thread(runnable);
       thread.setName("Моя новая нить");
              thread.start();
при в ходе в этот метод блокируется монитор o1 и метод ждет 10 секунд вывод результат Thread.holdsLock(obj1) == true Thread.holdsLock(obj2) == false В этот момент метод isNormalLockOrder начинает работу, проверяю в нем объекты на лок System.out.println(Thread.holdsLock(o1)); == false System.out.println(Thread.holdsLock(o2)); == false как работает этот метод? и почему из разных методов разные результаты holdsLock.
public class Solution {
   private static Thread thread1 = null ;
   private static Thread thread2 = null ;


    public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) throws InterruptedException {
         synchronized (obj1) {

            System.out.println(Thread.currentThread().toString()+"Зашли в блок нити obj1 "+ Thread.currentThread()+" Ждем 10 секунд...");

             System.out.println(thread2.holdsLock(obj1));
             System.out.println(thread2.holdsLock(obj2));
             System.out.println(thread1.holdsLock(obj1));
             System.out.println(thread1.holdsLock(obj2));
                    Thread.sleep(10000);
               synchronized (obj2) {
                   System.out.println("Зашли в блок нити obj2 "+ Thread.currentThread()+" Ждем 10 секунд...");
                   System.out.println(thread2.holdsLock(obj1));
                   System.out.println(thread2.holdsLock(obj2));
                   System.out.println(thread1.holdsLock(obj1));
                   System.out.println(thread1.holdsLock(obj2));
                   Thread.sleep(10000);
            }
        }
    }

    public static boolean isNormalLockOrder(final Solution solution, final Object o1, final Object o2) throws         Exception { Thread.sleep(2000);
        System.out.println(Thread.currentThread().toString()+"Зашли в проверку нитей " );
        System.out.println(thread2.holdsLock(o1));
        System.out.println(thread2.holdsLock(o2));
        System.out.println(thread1.holdsLock(o1));
        System.out.println(thread1.holdsLock(o2));

       synchronized (o1){
           System.out.println("1 В блокеровке первого обхекта");
          System.out.println(thread2.holdsLock(o1));
          System.out.println(thread2.holdsLock(o2));
           System.out.println(thread1.holdsLock(o1));
           System.out.println(thread1.holdsLock(o2));


      synchronized (o2) {
          System.out.println("1 В блокеровке второго обхекта");
          System.out.println(thread2.holdsLock(o1));
          System.out.println(thread2.holdsLock(o2));
          System.out.println(thread1.holdsLock(o1));
          System.out.println(thread1.holdsLock(o2));

      }}  synchronized (o2){
            System.out.println("2 В блокеровке Второго обхекта");
            System.out.println(thread2.holdsLock(o1));
            System.out.println(thread2.holdsLock(o2));
            System.out.println(thread1.holdsLock(o1));
            System.out.println(thread1.holdsLock(o2));

            synchronized (o1) {
                System.out.println("2 В блокеровке Первого обхекта");
                System.out.println(thread2.holdsLock(o1));
                System.out.println(thread2.holdsLock(o2));
                System.out.println(thread1.holdsLock(o1));
                System.out.println(thread1.holdsLock(o2));

            }}

return true;    }

    public static void main(String[] args) throws Exception {
        thread2 = Thread.currentThread();
        final Solution solution = new Solution();
        final Object o1 = new Object();
        final Object o2 = new Object();
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                 try {
                    solution.someMethodWithSynchronizedBlocks(o1,o2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        };
          thread1 = new Thread(runnable);
           thread1.setName("Моя новя нить");
               thread1.start();
        Thread.sleep(150);

        System.out.println(isNormalLockOrder(solution, o1, o2));
    }



    }