9
votes

Fils Java et fil principal

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


1 commentaires

Utilisez thread.join () .


5 Réponses :


3
votes
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();
}

1 commentaires

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.



21
votes

Créer une liste et attendre le tout. XXX PRE>

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);


0 commentaires

0
votes

Je pense que pour votre besoin, la meilleure solution est la cyclicbarrier Regardez http://download.oracle .com / Javase / 1.5.0 / Docs / API / Java / Util / Concurrent / CyclicBarrier.html

ou

à cet exemple


2 commentaires

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 / ...



1
votes

Il peut être fait en utilisant thread.join () ;.

Il est également répondu ici déjà. Regarde.


0 commentaires