Just know that interrupt() call is just setting a flag, it have to be doing IO work (like database call), or in wait() status, before the thread can really be interrupted. http://blogs.sun.com/roller/page/swinger?entry=swingworker_stop_that_train Another nice explanation about interrupt, in summary: What should we do when we call code that may cause an InterruptedException? Don't immediately yank out the batteries! Typically there are two answers to that question: 1) Rethrow the InterruptedException from your method. This is usually the easiest and best approach. It is used by the new java.util.concurrent.* package [ http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Semaphore.html#acquire() ], which explains why we are now constantly coming into contact with this exception. 2) Catch it, set interrupted status, return. If you are running in a loop that calls code which may cause the exception, you should set the status back to being interrupted. For example:
while (!Thread.currentThread().isInterrupted()) {
  // do something
  try {
    TimeUnit.SECONDS.sleep(1000);
  } catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    break;
  }
}
Remember the Law of the Sabotaged Doorbell - don't just ignore interruptions, manage them properly! - http://www.javaspecialists.eu/archive/Issue146.html Another blog explain about InterruptedException - http://www.nurkiewicz.com/2014/05/interruptedexception-and-interrupting.html http://ocpsoft.org/regex/how-to-interrupt-a-long-running-infinite-java-regular-expression http://praveer09.github.io/technology/2015/12/06/understanding-thread-interruption-in-java/ How to Stop a Java Thread Without Using Thread.stop()? - https://4comprehension.com/how-to-stop-a-java-thread-without-using-thread-stop/