Le thread courant peut subir une interruption temporaire d'un certain nombre de millisecondes en employant la méthode statique Thread.sleep().

//Applique une pause de une seconde
Thread.sleep(1000);

Cette méthode ne doit pas s'utiliser sur une instance de la classe Thread.

Il est donc possible d'interrompre temporairement un thread et de le reprendre après qu'une condition soit vérifiée.

public static void patienter(Thread[] operations) {
    for (int i = 0; i < operations.length; i++) {
        //Teste l'activité du thread
        if (operations[i].isAlive()) {
            try {
                Thread.sleep(100);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            i = 0; // Réinitialise la boucle for
        }
    }
}

Une boucle infinie se poursuit tant que tous les threads operations sont encore en activité. Dès que tous les threads operations ont été parcourus par la boucle for, alors le thread courant reprend à son tour son déroulement.

La méthode sleep() peut lancer une interruption InterruptedException, signifiant que le thread courant est interrompu par l'appel de la méthode interrupt() sur un autre thread.

public class DemoSleep extends Thread {
    private long debut;
    public DemoSleep() {
      debut = System.currentTimeMillis();
    }

    public void run() {
        for ( int i = 0; i < 20; i++ ) {
            afficher(i + " - Exécution du Thread", 100);
        }
    }
    public void afficher(String msg, int pause) {
        Thread t = Thread.currentThread();
        System.out.println(msg + " : " + t.getName() 
                        + "(" + (temps - debut) + " ms)");
        try {
            Thread.sleep(pause);
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        System.out.println("Début du thread principal");
        RelationThreads t = new RelationThreads();
        t.setName("Thread utilisateur");
        t.setDaemon(false);
        t.start();

        for ( int i = 0; i < 10; i++ ) {
            t.afficher(i + " - Programme principal", 300);
        }
        System.out.println("Fin du thread principal");
    }
}
/*Affiche :
Début du thread principal
0 - Programme principal : main
0 - Exécution du Thread : Thread utilisateur
1 - Exécution du Thread : Thread utilisateur
2 - Exécution du Thread : Thread utilisateur
1 - Programme principal : main
3 - Exécution du Thread : Thread utilisateur
4 - Exécution du Thread : Thread utilisateur
5 - Exécution du Thread : Thread utilisateur
2 - Programme principal : main
6 - Exécution du Thread : Thread utilisateur
7 - Exécution du Thread : Thread utilisateur
8 - Exécution du Thread : Thread utilisateur
3 - Programme principal : main
9 - Exécution du Thread : Thread utilisateur
10 - Exécution du Thread : Thread utilisateur
11 - Exécution du Thread : Thread utilisateur
4 - Programme principal : main
12 - Exécution du Thread : Thread utilisateur
13 - Exécution du Thread : Thread utilisateur
14 - Exécution du Thread : Thread utilisateur
5 - Programme principal : main
15 - Exécution du Thread : Thread utilisateur
16 - Exécution du Thread : Thread utilisateur
17 - Exécution du Thread : Thread utilisateur
6 - Programme principal : main
18 - Exécution du Thread : Thread utilisateur
19 - Exécution du Thread : Thread utilisateur
7 - Programme principal : main
8 - Programme principal : main
9 - Programme principal : main
Fin du thread principal
*/