I want some clarification on thread interruption.
What if a thread goes a long time without invoking a method that throws anInterruptedException? Then it must periodically invoke Thread.interrupted, which returns true if an interrupt has been received. For example:
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
When I call the method Thread.interrupt() it throws interrupted exception so, why I need to do if (Thread.interrupted()) I will simply do that
try {
for (int i = 0; i < inputs.length; i++) {
heavyCrunch(inputs[i]);
if (Thread.interrupted()) {
// We've been interrupted: no more crunching.
return;
}
}
} catch (InterruptedException ex) {
...
}
When you call Thread.interrupt() on another thread, two things happen:
throws InterruptedException, that method will throw an exception immediately.If the thread is busy in some code that does not throw InterruptedException, you won't get any exception. That's why you'd need to check if (Thread.interrupted()), to check the flag.
In your sample code the Java compiler would complain about an invalid catch block because none of the code in the try block throws InterruptedException.