Maison  >  Article  >  Java  >  Comment attendre la fin de l'exécution de plusieurs threads avant de continuer ?

Comment attendre la fin de l'exécution de plusieurs threads avant de continuer ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 10:17:03276parcourir

How to Wait for Multiple Threads to Finish Execution Before Proceeding?

Comment synchroniser l'exécution multithread

Dans les applications multithread, il est souvent nécessaire de coordonner l'exécution de tâches parallèles. Cet article explore une méthode permettant d'attendre la fin d'un groupe de discussions avant de continuer.

Le problème :

Considérez le code suivant :

<code class="java">public class DoSomethingInAThread implements Runnable {...}

public static void main(String[] args) {
    for (int n=0; n<1000; n++) {
        Thread t = new Thread(new DoSomethingInAThread());
        t.start();
    }
    // wait for all threads' run() methods to complete before continuing
}</code>

Dans cet exemple, plusieurs nouveaux fils de discussion sont créés et démarrés. Cependant, la méthode main() continue l'exécution immédiatement, sans attendre que ces threads terminent leurs tâches.

La solution :

Pour synchroniser l'exécution, nous pouvons créer un tableau de références de thread, puis utilisez la méthode join() sur chaque objet thread. Cela bloque le thread actuel jusqu'à ce que le thread cible ait terminé son exécution :

<code class="java">import java.lang.Thread;

public class DoSomethingInAThread implements Runnable {...}

public static void main(String[] args) {
    Thread[] threads = new Thread[1000];
    for (int n=0; n<threads.length; n++) {
        threads[n] = new Thread(new DoSomethingInAThread());
        threads[n].start();
    }
    for (Thread t: threads) {
        t.join();
    }
}</code>

Dans ce code révisé, la méthode main() crée un tableau de références de thread et démarre chaque thread. Il entre ensuite dans une boucle qui appelle join() sur chaque thread du tableau. Cela garantit que tous les threads terminent leurs tâches avant que la méthode main() ne continue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn