Quelle est la meilleure façon de faire du fil principal pour attendre que tous les threads soient terminés?
for(int i=0;i<n;i++){
Thread t=new Thread();
t.start();
}
//wait for all threads to finish
5 Réponses :
List<Thread> threads = new ArrayList<Thread>();
for(int i=0;i<n;i++){
Thread t=new Thread();
threads.add(t);
t.start();
}
for(Thread t:threads){
t.join();
}
Cela fonctionne, intéressant, j'ai commis l'erreur plus tôt en faisant T.Start (); t.join () dans le même bloc de code.
Créer une liste et attendre le tout. Cependant, l'utilisation d'un service exécuteur peut être un moyen plus élégant de gérer une piscine de filets. P> ExecutorService es = Executors.newCachedThreadPool();
for(int i=0;i<n;i++)
es.submit(new Task(n));
es.shutdown();
es.awaitTermination(timeout, TimeUnit.SECONDS);
Je pense que pour votre besoin, la meilleure solution est la ou p>
Votre lien API est à une ancienne version de Java. Utilisez Java 6 à la place.
Désolé télécharger.oracle.com/javase/6 / Docs / API / Java / Util / Concurrent / ...
Il peut être fait en utilisant Il est également répondu ici déjà. Regarde. p> Bien que la question soit étiquetée sous "Java", il peut également être fait dans C # de manière suivante p> thread.join () code> ;.
Vous pouvez utiliser un CountownLatch A > et dans votre tâche
(enfermer en essayez / enfin) p>
Utilisez
thread.join () code>.