Ich kann einfach nicht verstehen, in welcher Reihenfolge das Programm ausgeführt wird.Threads und Verwirrung über die Reihenfolge der Ausführung
public class sub {
public static void main(String args[])
{
base b1 = new base();
b1.s="b1";
b1.start();
base b2 = new base();
b2.s="b2 ";
b2.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class base extends Thread{
String s;
@Override
public void run() {
for(int i=0;i<5;i++)
{
System.out.println(s+" "+i);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// TODO Auto-generated method stub
}
}
Der Ausgang ist
b2 0
b1 0
b2 1
b1 1
b2 2
b1 2
b1 3
b2 3
b2 4
b1 4
Könnte jemand bitte erklären, warum die Ausgabe in dieser Reihenfolge ist. Warum ist das zuerst b2 vor b1 und nicht b1 vor b2? Warum wird dann zuerst b1 ausgeführt?
In einer asynchronen Ausführung (wenn Sie mehrere Threads starten) gibt es keine Garantie, welcher Thread zuerst gestartet oder zuerst abgeschlossen wird. Siehe http://stackoverflow.com/questions/40306342/how-much-of-a-threads-code-get-executed-ever-time-it-is-scheduled/40306449#40306449 – donlys
Und wenn Sie das steuern möchten Um zu bestellen, versuchen Sie ExecutorService. http://stackoverflow.com/questions/2153663/controlling-task-execution-order-with-executorservice –
Wenn Sie eine bestimmte Ausführungsreihenfolge möchten, warum verwenden Sie Threads? – EJP