2014-07-18 8 views
5

Questo è un pezzo di codice in una questione pratica SCJP:Codici sullo stesso filo eseguite in ordine insolito

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."); 
    } 
} 

'stato in parte menzionato here.

Tuttavia, la mia domanda non è la domanda precedente. Mentre eseguo il programma su alcune macchine più volte, occasionalmente ottengo RuntimeException prima di "eseguirlo" nell'output. Questo non ha senso per me, dal momento che queste righe di codice sono eseguite nello stesso thread, quindi avrebbe dovuto essere l'ordine inverso.

Qualcuno può spiegare perché succede?

+0

_ "esegui" prima di RuntimeException nell'output. Suona bene –

+0

Oops. Colpa mia. Modificato. – underlandian

+0

Dipende dal sistema, credo. Quando viene scaricato System.out? – RobAu

risposta

1

e.printStacktrace utilizza System.err.

System.out e System.err sono oggetti diversi. Ha lo scrittore bufferizzato da mostrare alla finestra del client.

Anche se verrà eseguito in ordine diverso, andrà a Buffer diverso.

Se il buffer Err viene stampato per primo, err verrà prima. Altrimenti verrà prima.

Problemi correlati