The call to interrupt doesn't causes interrupted exception as you are interrupting a instead of t (the actual thread). In the output, you can see there is one exception (Ex-B). That is because you call wait on an object whose lock the thread doesn't have...
Ooh, it's calling interrupt on a! I completely overlooked that fact, although for a second it looked suspicious
Thanks for clearing the confusion.
About the next statement that happens right after the thread.start() call: can we be sure that run() method will not execute right AFTER this call but rather will the next statement in the method? In other words: in the previous example how can we be sure that doDelay(100); will execute before t.doDelay(1000)?