Sunday, November 25, 2012

A Safe Way to Stop a Java Thread


A Safe Way to Stop a Java Thread

The Thread.stop() method is unsafe and thus deprecated. If the thread being stopped was modifying common data, that common data remains in an inconsistent state.A better way would be to have a variable indicating if the thread should be stopped. Other threads may set the variable to make the thread stop. Then, the thread itself may clean up and stop.
Consider the basic example shown below. The thread MyThread will not leave common data in an inconsistent state. If another thread calls the done() method forMyThread while MyThread is modifying data, MyThread will finish modifying the data cleanly before exiting.

public class MyThread extends Thread {

    private boolean threadDone = false;

    public void done() {
        threadDone = true;
    }

    public void run() {
        while (!threadDone) {
            // work here
            // modify common data
        }
    }

}
Note that this method does not eliminate concern about synchronization.

No comments:

Post a Comment