7
votes

Comment exécuter un morceau de code uniquement après la fin de tous les threads

J'ai un code de journalisation qui doit être exécuté après que tous les threads s sont exécutés. xxx

existe-t-il un moyen d'exécuter Dologging () uniquement après que les deux threads sont effectués avec leur traitement. Maintenant que Dologging () est appelé dès que T1 et T2 sont démarrés.


1 commentaires

Il convient de souligner que, puisque vous appelez courir au lieu de commencer, vous obtenez déjà le comportement souhaité.


3 Réponses :


24
votes

Juste joindre () Tous les threads avant votre Dologging () appel: xxx

Notez que l'ordre de rejoindre () < / code> Les appels ne comptent pas si vous voulez attendre tous vos discussions.


2 commentaires

Notez que si vous utilisez Java 1.5 ou plus tard, le nouveau Java.Util.ConCurrent doit être préféré sur une programmation de thread de bas niveau (voir la réponse de Gregory MostiZky).


@JIM: Avec Java 1.5 ou plus tard, je n'utiliserais même pas de compte-comte pour une telle chose, mais un simple exécuteur.



6
votes

En plus de la solution de jointure () Il y a aussi quelque chose appelé CountownLatch dans la bibliothèque Java.Util.ContCurrent. Il vous permet de l'initialiser à un certain nombre, puis d'attendre qu'il ait été touché le nombre de fois spécifié.

Exemple simple: p>

latch.countDown()


1 commentaires

+1 pour java.util.concurrent. Cette nouvelle fonctionnalité propose une programmation thread la plus basse dans Java inutile.



0
votes

Si vous créez des threads à l'aide d'un pool de threads, vous pouvez utiliser AWAITETERMINATION (TIMÉE LONGUEOUT, UNITÉ DE TIMEDUNIT) Méthode. Une fois la fois, il retournera true si tous les threads sont terminés, sinon retourne faux. XXX

, car vous devez d'abord estimer un délai d'abord, ce n'est pas comme flexible comme compte à rebours. Cette méthode est généralement utilisée avec arrêt () pour vérifier si toutes les threads sont fermés avec succès, étant donné un délai d'attente.


0 commentaires