Problem - Erstellen Sie N-Threads (zB 3, Namen können Thread-1, Thread-2, Thread-3 sein), die HelloWorld in umgekehrter Reihenfolge sagen wird, dh erster Thread -3 wird HelloWorld, dann Thread-2 und dann Thread-1 sagen. Das obige Problem kann auf verschiedene Arten gelöst werden, wie die Verwendung eines flüchtigen Flags, um anzuzeigen, welcher Thread ausgeführt werden muss, oder die Verwendung der Join-Methode (so dass die Thread-1-Vervollständigung von Thread-2 und Thread-2 auf Thread-3 abhängt)). Ich versuche, dies durch Join-Methode zu lösen. Aber es gibt mir kein richtiges Ergebnis. Bitte hilf mir. Unten ist mein Programm -join() -Methode funktioniert nicht richtig in meinem implementierten Code
Thread [] previosThread = {null};
int[] previousIndex = {0};
for (int i=3; i>=1; i--) {
int currentIndex = i;
System.out.print("PreviousIndex--"+previousIndex[0]+" ; ");
System.out.println("CurrentIndex--"+currentIndex);
Thread newThread = new Thread("Thread-"+i) {
public void run() {
if(previousIndex[0]!=0 && previousIndex[0]==currentIndex+1) {
try {
previosThread[0].join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println(this.getName()+" is saying HelloWorld!!");
}
};
previosThread[0] = newThread;
previousIndex[0] = currentIndex;
newThread.start();
}
Above Programm wie unter unsicheren Ausgang geben -
PreviousIndex - 0; CurrentIndex - 3 PreviousIndex - 3; CurrentIndex - 2 ZurückIndex - 2; CurrentIndex - 1 Thread-2 sagt HelloWorld !! Thread-1 sagt HelloWorld !! Thread-3 sagt HelloWorld !!
Das Starten eines Threads dauert eine kurze Zeit. Ihre Schleife wird sehr wahrscheinlich abgeschlossen sein, bevor * irgendein * Thread tatsächlich in die 'run()' Methode eintritt, also verweist 'previosThread [0]' auf den * letzten * Thread. Alle 3 Threads werden diesen letzten Wert sehen. – Andreas
@Andreas: Vielen Dank. Du hast mein Problem gelöst. :) – malviyarahuljayendra