Running wait () auf einer Thread-Instanz innerhalb von main () in Java

Ich spiele mit der zeitgesteuerten Version von wait () in java.lang.Object und habe festgestellt, dass es in zwei verschiedenen Szenarien unterschiedlich funktioniert.

Szenario1: Verwenden der Standarddefinition von run () in Thread

public static void main (String[] args) throws InterruptedException {
    Thread t = new Thread();    
    t.start();
    System.out.print("X");
    synchronized(t) { t.wait(10000);}
    System.out.print("Y");
}

Fragen zu Szenario1: Es tritt eine Verzögerung zwischen X und Y auf. Rufe ich wait () von main auf (obwohl t) und wird daher der Aufrufstapel des Hauptthreads anstelle des zweiten Threads verwendet?

Scenario2: Untergeordneter Thread, um run () zu überschreiben und etwas zu drucken.

public static void main (String[] args) throws InterruptedException {
     Thread t = new Thread() {public void run() 
                     {System.out.print("I am the second thread.");}};
     t.start();
     System.out.print("X");
     synchronized(t) { t.wait(10000);}
     System.out.print("Y");
}

Fragen zu Szenario 2: Ich habe KEINE Verzögerung! Was hat sich geändert, nur weil ich run () überschrieben habe? Jedes Mal, wenn ich das Programm starte, wird sofort "XI am the second thread.Y" ohne Verzögerung ausgegeben. Wo ist der Effekt von wait () geblieben?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage