Attendre la fin d'un thread

Un thread peut bloquer sa propre exécution en attendant la fin d'un autre thread avec la méthode "join".

Dans l'exemple suivant, deux threads s'exécutent en parallèle, le premier affichant des "T" et l'autre des ".". Après la moitié du traitement, un des threads s'arrête et attend que l'autre ait terminé avant de continuer.

public class Synchro implements Runnable {
    
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.print("T ");
            
            try {
                Thread.sleep(100);
            } catch (InterruptedException ie) {}
        }
    }
    
    public static void main(String args[]) throws InterruptedException {
                
        Synchro synchro = new Synchro();
        Thread t = new Thread(synchro);
        t.start();
        
        for (int i = 0; i < 50; i++) {
            System.out.print(".");
            Thread.sleep(100);
        }
        
        t.join();
        
        for (int i = 0; i < 50; i++) {
            System.out.print(".");
            Thread.sleep(100);
        }
    }
}

Sortie :

C:\>java Synchro
.T T .T .T .T .T .T .T .T .T .T .T .T .T .T .T ..T T .T .T .T .T .T .T .T .T .T
 .T .T .T ..T .T .T T .T .T .T ..T T ..T .T T ..T T ..T T ..T .T .T T .T T T T 
 T T T T T T T T T T T T T T  T T T T T T T T T T T T T T T T T T T T T T T T T
 T T T T T T T ..................................................

C:\>