J'ai un code de journalisation qui doit être exécuté après que tous les threads existe-t-il un moyen d'exécuter code> s sont exécutés.
Dologging () code> uniquement après que les deux threads sont effectués avec leur traitement. Maintenant que
Dologging () code> est appelé dès que T1 et T2 sont démarrés. P> p>
3 Réponses :
Juste Notez que l'ordre de joindre () code>
Tous les threads avant votre Dologging () code> appel:
rejoindre () < / code> Les appels ne comptent pas si vous voulez attendre tous vos discussions. p> p>
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.
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 pour java.util.concurrent. Cette nouvelle fonctionnalité propose une programmation thread la plus basse dans Java inutile.
Si vous créez des threads à l'aide d'un pool de threads, vous pouvez utiliser strong>, 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 AWAITETERMINATION (TIMÉE LONGUEOUT, UNITÉ DE TIMEDUNIT) CODE> Méthode. Une fois la fois, il retournera true si tous les threads sont terminés, sinon retourne faux.
arrêt () code> pour vérifier si toutes les threads sont fermés avec succès, étant donné un délai d'attente. P> P>
Il convient de souligner que, puisque vous appelez courir au lieu de commencer, vous obtenez déjà le comportement souhaité.