Was ist die Reihenfolge der Ausführung von neu erstellten Threads in Java
class Test {
boolean isFirstThread = true;
private synchronized void printer(int threadNo) {
if(isFirstThread) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
isFirstThread = false;
System.out.println(threadNo);
}
public void starter() {
new Thread(){
@Override()
public void run() {
printer(0);
}
}.start();
new Thread(){
@Override()
public void run() {
printer(1);
}
}.start();
new Thread(){
@Override()
public void run() {
printer(2);
}
}.start();
new Thread(){
@Override()
public void run() {
printer(3);
}
}.start();
}
}
Im obigen Code, wenn ich den Starter von der Hauptleitung aus anrufe. Ich habe vier neue Threads erstellt, um eine synchronisierte Funktion aufzurufen. Ich weiß, dass die Reihenfolge der Ausführung der Threads nicht vorhergesagt werden kann. Es sei denn, sie warten alle eine Weile, damit der erste Thread beendet und aus dem synchronisierten Block herauskommt. In diesem Fall erwarte ich, dass sich alle Threads in einer Warteschlange befinden, also habe ich die Antwort als @ erwarte
0
1
2
3
Aber konsistent (ich habe das Programm mehr als 20 Mal ausgeführt) Ich habe die Ausgabe als @ erhalt
0
3
2
1
Welche bedeutet, dass die Threads in einem Stapel statt in einer Warteschlange gehalten werden. Wieso ist es so? Jede Antwort im Google-Ergebnis besagt, dass es sich um eine Warteschlange handelt, aber ich erhalte sie als Stapel. Ich möchte wissen, warum die Threads nicht in der Warteschlange, sondern im Stapel abgelegt sind (was nicht intuitiv ist