Un thread qui s'est endormi (de lui-même par la méthode "sleep") peut être réveillé par un autre thread avec la méthode "interrupt".
Exemple :
public class Dormeur implements Runnable {
public void run() {
try {
System.out.println("S'endort pour 10 secondes...");
Thread.sleep(10000);
System.out.println("Se réveille de lui-même");
} catch (InterruptedException ie) {
System.out.println("Se fait reveiller");
}
}
public static void main(String args[]) {
// créer et lancer le thread
Thread t = new Thread(new Dormeur());
t.start();
// laisser le temps au dormeur de s'endormir
// avant que le thread principal ne se termine
try {
Thread.sleep(1); // une milliseconde
} catch (InterruptedException ie) {}
System.out.println("Reveille le thread à partir de main()");
t.interrupt();
// laisser le temps au dormeur de se réveiller
// avant que le thread principal ne se termine
try {
Thread.sleep(1); // une milliseconde
} catch (InterruptedException ie) {}
System.out.println("Sort de main()");
}
}
Sortie :
C:\>java Dormeur S'endort pour 10 secondes... Reveille le thread à partir de main() Se fait reveiller Sort de main() C:\>
Notez que cela fonctionne même si le thread réveillé n'a pas été créé par le thread qui le réveille.