2014-07-18 13 views
5

Jest to kod w praktyce pytanie SCJP:koduje ten sam gwint wykonany w nietypowym celu

public class Threads2 implements Runnable { 

    public void run() { 
     System.out.println("run."); 
     throw new RuntimeException("Problem"); 
    } 

    public static void main(String[] args) { 
     Thread t = new Thread(new Threads2()); 
     t.start(); 
     System.out.println("End of method."); 
    } 
} 

został częściowo wymienione here.

Jednak moje pytanie nie jest wcześniejsze pytanie. Ponieważ wielokrotnie uruchamiam program na kilku maszynach, czasami uzyskuję RuntimeException przed "uruchomieniem" w danych wyjściowych. Nie ma to dla mnie sensu, ponieważ linie kodów wykonane w tym samym wątku powinny być odwrócone.

Czy ktoś może wyjaśnić, dlaczego tak się dzieje?

+0

_ "Uruchom" przed RuntimeException w output._ sounds right –

+0

Ups. Mój błąd. Edytowane. – underlandian

+0

Zależy od systemu, jak sądzę. Kiedy system System.out jest przepłukiwany? – RobAu

Odpowiedz

1

e.printStacktrace używa System.err.

System.out i System.err to inny obiekt. Ma buforowany program piszący do wyświetlania w oknie klienta.

Nawet jeśli zostanie wykonana w innej kolejności, przejdzie do innego bufora.

Jeśli w buforze Err pojawią się pierwsze błędy, przyjdzie pierwsza. W przeciwnym razie nastąpi pierwsze.