programmation Java (école d'ingénieur) · Chapitre 15 · Exercice de TD
Des fils en chaîne
Threads · niveau 3 (difficile)
Énoncé
Écrire un programme qui lance dix fils numérotés de à , de sorte qu'ils affichent toujours leur numéro dans l'ordre 0 1 2 ... 9, alors que le système les exécute dans un ordre quelconque. Indication : chaque fil reçoit le fil précédent et l'attend.
Corrigé
Chaque fil commence par attendre la fin du fil précédent, puis affiche son numéro. Le fil n'attend personne.
public class Chaine {
public static void main(String[] args) throws InterruptedException {
Thread precedent = null;
for (int i = 0; i < 10; i++) {
Thread attendre = precedent; // effectivement finale
int numero = i;
Thread t = new Thread(() -> {
try {
if (attendre != null) attendre.join();
} catch (InterruptedException e) { Thread.currentThread().interrupt(); }
System.out.print(numero + " ");
});
t.start();
precedent = t;
}
precedent.join();
System.out.println();
}
}
0 1 2 3 4 5 6 7 8 9
Les dix fils démarrent presque en même temps, dans un ordre quelconque, mais le fil ne peut afficher qu'après la fin du fil . L'exemple montre que l'on peut imposer un ordre ; il montre aussi que l'on a alors perdu tout le parallélisme : c'est un programme séquentiel déguisé.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.