Attendre plusieurs threads
Fermé
parousky
Messages postés
325
Date d'inscription
mardi 11 septembre 2012
Statut
Membre
Dernière intervention
20 février 2022
-
Modifié par KX le 23/01/2015 à 19:37
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 févr. 2015 à 13:42
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 1 févr. 2015 à 13:42
A voir également:
- Attendre plusieurs threads
- Réactiver compte facebook sans attendre 24h - Guide
- Comment perdre les flammes sur snap sans attendre 24h - Forum Snapchat
- Comment bloquer sur facebook sans attendre 48h - Forum Facebook
- Perde de flammes - Forum Snapchat
- Comment résilier canal plus sans attendre la date anniversaire forum ✓ - Forum Vos droits sur internet
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
23 janv. 2015 à 19:44
23 janv. 2015 à 19:44
Bonjour,
Au risque de me répéter, créer un objet
Sinon, puisque join est une méthode de la classe Thread (comme start), c'est sur ces objets qu'il faut l'appliquer. Peu importe que l'appel dans le run soit static ou non.
Au risque de me répéter, créer un objet
new Serveur1();sans rien faire avec ne sert à rien, ton code est dans une méthode static donc l'appel
Serveur1.main(null)suffit.
Sinon, puisque join est une méthode de la classe Thread (comme start), c'est sur ces objets qu'il faut l'appliquer. Peu importe que l'appel dans le run soit static ou non.
public static void main(String[] args) { // Initialisation des threads Thread thread1 = new Thread() { public void run() { try { Serveur1.main(null); } catch (Exception e) { e.printStackTrace(); } } }; Thread thread2 = new Thread() { public void run() { try { Serveur2.main(null); } catch (Exception e) { e.printStackTrace(); } } }; // Démarrage des threads thread1.start(); thread2.start(); // Attente de la fin des threads thread1.join(); thread2.join(); }
parousky
Messages postés
325
Date d'inscription
mardi 11 septembre 2012
Statut
Membre
Dernière intervention
20 février 2022
6
Modifié par KX le 1/02/2015 à 13:32
Modifié par KX le 1/02/2015 à 13:32
Merci pour le code ! Effectivement, les threads s'attendent mutuellement, mais ils s'attendent trop, le code ne se poursuit pas après ! Voilà ce que j'ai écris :
Mais le texte n'apparaît jamais ! Même après plusieurs heures !
Vois-tu un problème ?
Merci d'avance !
// ***** Nantes ***** Thread Nte = new Thread() { public void run() { Nantes.Init(); } }; Nte.start(); // ***** Cavaillon ***** Thread Cvn = new Thread() { public void run() { Cavaillon.Init(); } }; Cvn.start(); Nte.join(); Cvn.join(); System.out.println("Après join() pour les aéroports");
Mais le texte n'apparaît jamais ! Même après plusieurs heures !
Vois-tu un problème ?
Merci d'avance !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
1 févr. 2015 à 13:42
1 févr. 2015 à 13:42
Si ça ne se termine jamais c'est que les deux threads se bloquent l'un l'autre : A attends B, et B attends A, donc aucun des deux ne peux se terminer.
Il faudrait voir le code complet pour savoir ce qui se passe, et éventuellement faire un thread dump.
Pour faire un thread dump (au moment où le programme tourne en rond), tu ouvres une invite de commandes et tu tapes
Ça va te sortir la liste des processus Java qui tournent sur ta machine. Il faut identifier le processus qui t'intéresse (grâce à son nom), puis avec le numéro correspondant tu fais
Il faudrait voir le code complet pour savoir ce qui se passe, et éventuellement faire un thread dump.
Pour faire un thread dump (au moment où le programme tourne en rond), tu ouvres une invite de commandes et tu tapes
jps
Ça va te sortir la liste des processus Java qui tournent sur ta machine. Il faut identifier le processus qui t'intéresse (grâce à son nom), puis avec le numéro correspondant tu fais
jstack 1234 > stack.txtet tu regardes le contenu du fichier stack.txt qui t'indiqueras où sont bloqués les threads.