You may interrupt a blocked thread.
A thread may block itself by executing one of the sleep(), wait(), and join() methods.
If a thread blocked is interrupted, an InterruptedException is thrown and the interrupted status of the thread is cleared.
The following code starts a thread that sleeps for one second and prints a message until it is interrupted.
The main thread sleeps for five seconds, so the sleeping thread gets a chance to sleep and print messages a few times.
When the main thread wakes up, it interrupts the sleeping thread.
public class Main { public static void main(String[] args) { Thread t = new Thread(Main::run); t.start();/*from w w w . ja v a2s . co m*/ // main thread sleeps for 5 seconds try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } // Interrupt the sleeping thread t.interrupt(); } public static void run() { int counter = 1; while (true) { try { Thread.sleep(1000); System.out.println("Counter:" + counter++); } catch (InterruptedException e) { System.out.println("I got interrupted!"); // Terminate the thread by returning return; } } } }