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 */