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.