Получение потока для приостановки - Thread.wait () / Thread.notify ()

Я пытаюсь понять, как работают потоки, и я написал простой пример, в котором я хочу создать и запустить новый поток, поток, отобразить числа от 1 до 1000 в основном потоке, возобновить дополнительный поток и отобразить числа от 1 до 1000 во вторичном потоке. Когда я пропускаю Thread.wait () / Thread.notify (), он ведет себя как ожидалось, оба потока отображают несколько чисел одновременно. Когда я добавляю эти функции, по какой-то причине номера основного потока печатаются вторыми, а не первыми. Что я делаю неправильно?

public class Main {

    public class ExampleThread extends Thread {

        public ExampleThread() {
            System.out.println("ExampleThread's name is: " + this.getName());
        }

        @Override
        public void run() {         
            for(int i = 1; i < 1000; i++) {
                System.out.println(Thread.currentThread().getName());
                System.out.println(i);
            }
        }
    }

    public static void main(String[] args) {
        new Main().go();
    }

    public void go() {
        Thread t = new ExampleThread();
        t.start();

        synchronized(t) {
            try {
                t.wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        for(int i = 1; i < 1000; i++) {
            System.out.println(Thread.currentThread().getName());
            System.out.println(i);
        }

        synchronized(t) {
            t.notify();
        }
    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос