2016-07-07 39 views
-3

Manchmal scheint die Hauptmethode in Java außer Betrieb zu sein. Hier ist ein Beispiel mit Threads. Der zweite Thread führt die Ausführung fort (beide wirken auf ein synchronisiertes Objekt, sodass der zweite Thread warten sollte, bis der erste Thread fertig ist, aber stattdessen wird er zuerst ausgeführt).Java-Threads, die nicht in der richtigen Reihenfolge ausgeführt werden

public class Sync { 
    public static void main(String[] args) { 
     int a [] = { 1, 2, 3, 4, 5 }; 

     MyThread mt1 = new MyThread("Child #1", a); 
     MyThread mt2 = new MyThread("Child #2", a); 

     try { 
      mt1.thread.join(); 
      mt2.thread.join(); 
     } catch(InterruptedException exc) { 
      System.out.println("Main thread interrupted."); 
     } 
    } 
} 

Ich lief den Code zuerst in einer IDE, so dachte ich, dass das Problem sein könnte, aber ich habe das gleiche Ergebnis, wenn Zeilenbefehl.

+0

Veröffentlichen Sie bitte die Klasse 'MyThread'. Wir können nicht wissen, was ohne es passiert. – BackSlash

+0

Bitte lesen Sie Java synchronisiert Block – logger

+0

Dieser Code wird nicht viel tun, da die Threads mt1 und mt2 nie gestartet werden. Wenn Sie ein minimales Arbeitsbeispiel bereitstellen könnten, würde das helfen. –

Antwort

1

meine Interpretation Ihrer Frage ist, dass Sie denken, von

try { 
      mt1.thread.join(); 
      mt2.thread.join(); 
    } 

in der Hauptfunktion aufrufen, erwartest du Faden 1 durch 2. Faden gefolgt execute

jedoch von MT1 Aufruf. thread.join(); Im Hauptthread wird nur die Ausführung der Hauptfunktion ausgesetzt, bis mt1 die Ausführung beendet. Dies sagt nichts darüber aus, ob mt1 vor, nach oder gleichzeitig mit mt2 ausgeführt wird. Alles, was es möglicherweise sicherstellen könnte, ist, dass der Haupt-Thread zuerst auf mt1 wartet und dann auf mt2 wartet.

+0

Das macht sehr viel Sinn. Vielen Dank! – yairks

Verwandte Themen