Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →