Im obigen Beispiel wird die Join-Methode der Thread-Klasse häufig verwendet. Ich denke, Sie haben vielleicht schon erraten, welche Funktion die Join-Methode hat. Ja, die Funktion der Join-Methode besteht darin, den asynchronen Ausführungsthread in eine synchrone Ausführung umzuwandeln. Das heißt, wenn die Startmethode der Thread-Instanz aufgerufen wird, kehrt diese Methode sofort zurück. Wenn Sie nach dem Aufruf der Startmethode einen von diesem Thread berechneten Wert verwenden müssen, müssen Sie die Join-Methode verwenden. Wenn Sie die Join-Methode nicht verwenden, gibt es keine Garantie dafür, dass der Thread ausgeführt wird, wenn eine Anweisung nach der Startmethode ausgeführt wird. Nach Verwendung der Join-Methode setzt das Programm die Ausführung erst fort, wenn dieser Thread beendet wird. Der folgende Code demonstriert die Verwendung von Join.
Kopieren Sie den Codecode wie folgt:
Paket mythread;
Die öffentliche Klasse JoinThread erweitert Thread
{
öffentliches statisches int n = 0;
statisch synchronisiert void inc()
{
n++;
}
public void run()
{
for (int i = 0; i < 10; i++)
versuchen
{
inc();
sleep(3); // Um die laufenden Ergebnisse zufälliger zu machen, verzögern Sie 3 Millisekunden
}
Catch (Ausnahme e)
{
}
}
public static void main(String[] args) löst eine Ausnahme aus
{
Thread-Threads[] = neuer Thread[100];
for (int i = 0; i < threads.length; i++) // 100 Threads erstellen
threads[i] = new JoinThread();
for (int i = 0; i < threads.length; i++) // Die gerade erstellten 100 Threads ausführen
threads[i].start();
if (Argumente Länge > 0)
for (int i = 0; i < threads.length; i++) // Weitermachen, nachdem alle 100 Threads ausgeführt wurden
threads[i].join();
System.out.println("n=" + JoinThread.n);
}
}
In Routine 2-8 werden 100 Threads erstellt und jeder Thread erhöht die statische Variable n um 10. Wenn n ausgegeben wird, nachdem alle 100 Threads ausgeführt wurden, sollte der n-Wert 1000 sein.
1. Test 1
Verwenden Sie den folgenden Befehl, um das obige Programm auszuführen:
Kopieren Sie den Codecode wie folgt:
Java mythread.JoinThread
Die Ergebnisse der Ausführung des Programms sind wie folgt:
Kopieren Sie den Codecode wie folgt:
n=442
Dieses Laufergebnis kann in verschiedenen Laufumgebungen einige Unterschiede aufweisen, aber im Allgemeinen ist n nicht gleich 1000. Anhand der obigen Ergebnisse können wir sicher sein, dass n nicht ausgegeben wird, nachdem alle 100 Threads ausgeführt wurden.
2. Test 2
Führen Sie den obigen Code mit dem folgenden Befehl aus:
In der obigen Befehlszeile gibt es einen Parameter-Join. Tatsächlich kann jeder Parameter in der Befehlszeile verwendet werden, solange ein Parameter Join hier nur verwendet wird, um anzugeben, dass die Join-Methode zum Synchronisieren der Ausführung verwendet wird diese 100 Threads.
Die Ergebnisse der Ausführung des Programms sind wie folgt:
Kopieren Sie den Codecode wie folgt:
n=1000
Unabhängig davon, in welcher Betriebsumgebung Sie den obigen Befehl ausführen, erhalten Sie das gleiche Ergebnis: n=1000. Dies zeigt vollständig, dass alle 100 Threads ausgeführt worden sein müssen, daher muss n gleich 1000 sein.