Java: How to stop a thread?

Sun deprecated Thread.stop() because it is unsafe. They didn’t provide any direct alternative for this operation; instead they are making us to reinvent the wheel. Here I am sharing my style of safe thread stop implementation.

public class CustomThread extends Thread {

  private boolean shutdown;

  @Override
  public void run() {
    while (true) {
       if (shutdown) {
         break;
       }

       // TODO: your actual task code goes here

       if (shutdown) {
         break;
       }
       try {
          // your thread sleep interval
          Thread.sleep(6000);
       } catch (InterruptedException exp) {
          // ignore this error
       }
     }
  }

  public void shutdown() {
     if (isAlive()) {
        this.shutdown = true;
        this.interrupt();
        try {
           // wait till this thread dies
           this.join();
        } catch (InterruptedException e) {
           // safe to ignore this error
        }
     }
  }
}

Hope the above code is self explanatory. I am happy with the above code because it uses most of the thread functions like join(), interrupt() and isAlive(). For web applications, threads can be started from context listener; you can invoke shutdown() method from Content Listener’s destroy() method. You can find more information in the below link.

http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

Related Articles

5 Responses to Java: How to stop a thread?

  1. Venkat says:

    Found an another article that explains the power of interrupt concept.
    http://www.ibm.com/developerworks/java/library/j-jtp05236.html

  2. mala says:

    good one

  3. Pingback: Not losing your object when thread died « When IE meets SE…

  4. Pingback: Clete's Blog » Stopping a Thread in Java – Safely and Easily

  5. epl202020 says:

    The producer–consumer problem (also known as the bounded-buffer problem) is a classic example of a multi-process synchronization problem. The problem describes two processes, the producer and the consumer, who share a common, fixed-size buffer used as a queue

    Learn when and How to Stop the Thread,using jconsole or JvisualVM to indetify is the thread is running

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: