Sto giocando con la versione a tempo di wait() in java.lang.Object e ho osservato che agisce in modo diverso in due diversi scenari.Running wait() su un'istanza di Thread da main() in Java
Scenario1: Utilizzando la definizione di default di run() nella Discussione
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");
}
Domande su scenario1: sto sperimentando un ritardo tra X e Y. E 'questa attesa perché sto chiamando() da main (anche se, su t) e quindi lo stack di chiamate del thread principale viene utilizzato, piuttosto che quello del secondo thread?
Scenario2:Sottoclasse Filettatura al volo per eseguire l'override di esecuzione() per stampare qualcosa.
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");
}
Domande su scenario2: NON sto sperimentando ogni ritardo a tutti! Cosa è cambiato solo perché ho eseguito overridden()? Ora, ogni volta che eseguo il programma, stampa immediatamente "XI am the second thread.Y" senza alcun ritardo, qualunque cosa! Dove è andato a finire l'effetto di wait()?
Perché utilizzare "l'implementazione predefinita di esecuzione" in una discussione? – Patrick
@Patrick: solo per testare il threading in Java, nient'altro. – softwarelover
Non riesco a riprodurre i risultati con lo scenario 2 come descritto. C'è qualcosa che sta accadendo nel tuo ambiente, o con la classe che lo racchiude. – jdv