The Java documentation is not clear on this point. What happens if you call interrupt on a Thread before a call to Thread.sleep():
//interrupt reaches Thread here
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
return;
}
Will the InterruptedException be thrown?
Please point to relevant documentation.
Yes, it will throw an exception. According to the javadoc for Thread.sleep, the method:
The ‘has’ in this case is an informal way of referring to the interrupted status. It’s a shame that it is informal – if there’s somewhere a spec should be precise and unambiguous, well, it’s everywhere, but it’s the threading primitives above all.
The way the interrupted status mechanism works in general is if that a thread receives an interruption while it’s not interruptible (because it’s running), then the interruption is essentially made to wait until the thread is interrupted, at which point it swoops in an causes an InterruptedException. This is an example of that mechanism.