Monday, 14 September 2015

Differences between interrupted() and isInterrupted() methods

interrupted() method
interrupted() is a static method in Thread class that determines if the current thread has been interrupted.

"The interrupted status of the thread is cleared by this method".
The interrupted() method is always checks the current thread and clears the interruption "flag".

Therefore, if a thread was interrupted, calling interrupted() once would return true, while a second call to it would return false until the current thread is interrupted again.

isInterrupted() method
isInterrupted() is an instance method that tests if this thread instance has been interrupted.

It reports the status of the thread on which it is invoked. 
"The interrupted status of the thread is unaffected by this method", it does not clear the interruption flag. If the flag is set, it will remain set after calling this method.

Use it here
If you were writing your own thread pool, you might want to check the interrupted status on one of the threads that you are managing. In that case, you would call managedThread.isInterrupted() to check it's interrupted status.

If you are writing your own InterruptedException handlers that don't immediately retrigger an equivalent exception via Thread.currentThread(). interrupt()

(for example, you might have a finally block after your exception handlers), you might want to check whether that thread that you are currently running on has been interrupted via an outside call or InterruptedException. In that case, you would check the boolean value of Thread.interrupted() to check on the status of your current thread.

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...