Dans l'exemple ci-dessus, la méthode join de la classe Thread est utilisée plusieurs fois. Je pense que vous avez peut-être deviné quelle est la fonction de la méthode join. Oui, la fonction de la méthode join est de transformer le thread d'exécution asynchrone en une exécution synchrone. C'est-à-dire que lorsque la méthode start de l'instance de thread est appelée, cette méthode sera immédiatement renvoyée. Si vous devez utiliser une valeur calculée par ce thread après avoir appelé la méthode start, vous devez utiliser la méthode join. Si vous n'utilisez pas la méthode join, rien ne garantit que lorsqu'une instruction suivant la méthode start est exécutée, le thread sera exécuté. Après avoir utilisé la méthode join, le programme ne poursuivra pas son exécution tant que ce thread ne se terminera pas. Le code suivant montre l'utilisation de join.
Copiez le code comme suit :
mythread du paquet ;
la classe publique JoinThread étend Thread
{
public statique int n = 0 ;
statique synchronisé void inc()
{
n++;
}
exécution publique vide()
{
pour (int i = 0; i < 10; i++)
essayer
{
inc();
sleep(3); // Afin de rendre les résultats en cours d'exécution plus aléatoires, retardez 3 millisecondes
}
attraper (exception e)
{
}
}
public static void main (String[] args) lève une exception
{
Fils de discussion[] = nouveau fil[100] ;
for (int i = 0; i < threads.length; i++) // Créer 100 threads
threads[i] = new JoinThread();
for (int i = 0; i < threads.length; i++) // Exécute les 100 threads qui viennent d'être créés
fils[i].start();
si (longueur des arguments > 0)
for (int i = 0; i < threads.length; i++) // Continue après que les 100 threads aient été exécutés
threads[i].join();
System.out.println("n=" + JoinThread.n);
}
}
Dans la routine 2-8, 100 threads sont créés et chaque thread augmente la variable statique n de 10. Si n est affiché une fois les 100 threads exécutés, la valeur n doit être 1 000.
1. Essai 1
Utilisez la commande suivante pour exécuter le programme ci-dessus :
Copiez le code comme suit :
java mythread.JoinThread
Les résultats de l'exécution du programme sont les suivants :
Copiez le code comme suit :
n = 442
Ce résultat d'exécution peut présenter certaines différences selon les différents environnements d'exécution, mais généralement, n ne sera pas égal à 1 000. D'après les résultats ci-dessus, nous pouvons être sûrs que n est généré avant que les 100 threads ne soient exécutés.
2. Essai 2
Exécutez le code ci-dessus à l'aide de la commande suivante :
Il y a un paramètre join dans la ligne de commande ci-dessus. En fait, n'importe quel paramètre peut être utilisé dans la ligne de commande, à condition qu'il y ait un paramètre Join qui est utilisé ici uniquement pour indiquer que la méthode join est utilisée pour synchroniser l'exécution de. ces 100 fils.
Les résultats de l'exécution du programme sont les suivants :
Copiez le code comme suit :
n=1000
Quel que soit l'environnement d'exploitation dans lequel vous exécutez la commande ci-dessus, vous obtiendrez le même résultat : n=1000. Cela démontre pleinement que les 100 threads doivent avoir été exécutés, donc n doit être égal à 1000.