Добрый день! Подскажите, что, пошагово, происходит когда отрабатывает данных код. Запутался совсем.
public void someMethodWithSynchronizedBlocks(Object obj1, Object obj2) {
        synchronized (obj1) {
            synchronized (obj2) {
                System.out.println(obj1 + " " + obj2);
            }
        }
    }

    public static boolean isLockOrderNormal(final Solution solution, final Object o1, final Object o2) throws Exception {
        Thread thread1 = new Thread() {
            @Override
            public void run() {
                solution.someMethodWithSynchronizedBlocks(o1,o2);
            }
        };
        Thread thread2 = new Thread() {
            @Override
            public void run() {
                synchronized (o1){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {}
                    synchronized (o2){}
                }
            }
        };
        thread2.start();
        thread1.start();
        Thread.sleep(100);
        return thread1.getState()!=Thread.State.BLOCKED;
у меня то false то true выводит.