« Bonjour, Amigo ! Je vois que tu fais de grands progrès dans l'apprentissage des threads. »

« Ce n'était pas si difficile, en fait. »

C'est super ! Aujourd'hui, tu as le droit à une leçon facile, et le sujet est la méthode join.

Imagine la situation suivante : le thread principal a créé un thread enfant pour accomplir une tâche. Le temps passe, et maintenant le thread principal a besoin des résultats des travaux effectués par le thread enfant. Mais le thread enfant n'a pas encore fini son travail. Qu'est-ce que le thread principal doit faire ?

Bonne question. Qu'est-ce que le thread principal doit faire ?

« C'est précisément à cela que la méthode join sert. Elle nous permet de dire à un thread d'attendre pendant qu'un autre finit son travail : »

Code Description
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Classe qui implémente l'interface Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
Le thread principal crée un thread enfant : thread1.

Puis il le démarre en appelant thread1.start();

Il attend ensuite qu'il se termine avec thread1.join();

Un thread peut appeler la méthode join sur l'objet Thread d'un second thread. Ainsi, le premier thread (qui appelle la méthode) cesse son travail jusqu'à ce que le deuxième thread (dont la méthode join de l'objet a été appelée) se termine.

Il faut distinguer deux choses : nous avons un thread (un environnement d'exécution séparé) et nous avons un objet Thread.

« C'est tout ? »

« Oui. »

« Mais pourquoi doit-on créer un thread, puis immédiatement attendre qu'il se termine ? »

« Ce n'est peut-être pas nécessaire immédiatement. Mais ça pourrait l'être après un certain temps. Après avoir démarré son premier thread enfant, le thread principal peut affecter beaucoup d'autres tâches à d'autres threads (en les créant et en appelant la méthode start). Ensuite, quand il n'a plus de travail à faire, il doit traiter les résultats du premier thread enfant. Chaque fois que tu dois attendre qu'un autre thread finisse de travailler, tu dois appeler la méthode join. »

« Compris. »