Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What kind of behaviour causes an interrupted exception?

I'm relatively new to Threading in Java and I've noticed that everytime I use Thread.sleep() I have to catch InterrupetdException.

What kind of behaviour causes this, and in simple applications where I have a monitor thread can I just Ignore the exception?

like image 451
Omar Kooheji Avatar asked Oct 22 '08 10:10

Omar Kooheji


2 Answers

It happens when something calls interrupt() on the thread. This article by Brian Goetz explains the interruption mechanism and how you should handle InterruptedExceptions:

"The most common response to InterruptedException is to swallow it -- catch it and do nothing (or perhaps log it, which isn't any better) -- as we'll see later in Listing 4. Unfortunately, this approach throws away important information about the fact that an interrupt occurred, which could compromise the application's ability to cancel activities or shut down in a timely manner."

"If you catch InterruptedException but cannot rethrow it, you should preserve evidence that the interruption occurred [...]. This task is accomplished by calling interrupt() to "reinterrupt" the current thread."

like image 111
Dan Dyer Avatar answered Oct 14 '22 15:10

Dan Dyer


As others have said, it is caused by some other thread calling interrupt() on the Thread object that is sleeping.

What this means in plain english, is that some other thread has decided to cancel the sleeping thread. The try/catch block is there so you can gracefully handle the cancellation of the thread, and safely clean up any resources, or shut down whatever operation it was doing correctly.

If you don't actually need to do any of that, then yes, you still need an empty catch block. But that's Java for you...​​​​​​​​​​​​​​​​​​​​

like image 27
madlep Avatar answered Oct 14 '22 17:10

madlep