programmation Java (école d'ingénieur) · Chapitre 15 · Application directe du cours
Prévoir les sorties
Threads · niveau 1 (application)
Énoncé
On considère le programme suivant.
public class Prevoir {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> System.out.print("B"));
System.out.print("A");
t.start();
System.out.print("C");
t.join();
System.out.print("D");
}
}
- Quelles sont toutes les sorties possibles ?
- Même question si l'on supprime
t.join(). - Même question si l'on remplace
t.start()part.run()(avec lejoin).
Corrigé
- « A » est affiché avant le
start, donc en premier. Ensuite « B » (filt) et « C » (fil principal) sont concurrents, dans un ordre quelconque. Enfinjoinattend la fin det: « D » vient en dernier. Deux sorties possibles :ABCDetACBD. En pratique, sur 200 exécutions, la machine de l'auteur a toujours affichéACBD: démarrer un fil prend du temps, et le fil principal a celui d'écrire « C ». MaisABCDreste possible, et un programme qui compterait sur l'un des deux ordres serait faux. - Sans
join, « D » peut aussi précéder « B » :ABCD,ACBDouACDB. « B » finit toujours par s'afficher : le programme attend la fin de tous les fils non démons. run()est un appel ordinaire, exécuté par le fil principal : la sortie est toujoursABCD. Lejoinsur un thread jamais démarré rend la main immédiatement.
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.