"Before software can be reusable it first has to be usable"- Ralph Johnson

Friday, October 10, 2014

How to Stop A Thread in Java

By 9:19 AM
Here is one of the most asked question interviewer asks very often.
How can we stop a thread..??

As we know Thread is one of important Class in Java and multi-threading is most widely used feature, but there is no clear way to stop Thread in Java. Earlier there was a stop method exists in Thread Class but Java deprecated that method citing some safety reason. By default a Thread stops when execution of run() method finish either normally or due to any Exception. In this article we will How to Stop Thread in Java by using a boolean State variable or flag. Using flag to stop Thread is very popular way  of stopping thread and its also safe, because it doesn't do anything special rather than helping run() method to finish it self.
Another important point is that you can not restart a Thread which run() method has finished already , you will get an IllegalStateExceptio, following is a Sample Code for stopping a Thread in Java:


  private class Runner extends Thread{
    boolean bExit = false;
  
    public void exit(boolean bExit){
        this.bExit = bExit;
    }
  
    @Override
    public void run(){
        while(!bExit){
            System.out.println("Thread is running");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {
                    Logger.getLogger(ThreadTester.class.getName()).log(Level.SEVERE, null, ex);
                }
        }
    }
}



Should we make bExit Volatile ?
Since every Thread has its own local memory in Java its good practice to make bExit volatile because we may alter value of bExit from any thread and making it volatile guarantees that Runner will also see any update done before making bExit.

That’s all on how to stop thread in Java , let me know if you find any other way of stopping threads in Java without using deprecated stop() method.

0 comments:

Post a Comment