/** A template to control the state of a thread through setting
* an internal flag.
public class StoppableThread extends Thread {
public static final int STOP = 0;
public static final int RUN = 1;
public static final int WAIT = 2;
private int state = RUN;
/** Public method to permit setting a flag to stop or
* suspend the thread. The state is monitored through the
* corresponding checkState method.
*/
public synchronized void setState(int state) {
this.state = state;
if (state==RUN) {
notify();
}
}
/** Returns the desired state of the thread (RUN, STOP, WAIT).
* Normally, you may want to change the state or perform some
* other task if an InterruptedException occurs.
*/
private synchronized int checkState() {
while (state==WAIT) {
try {
wait();
} catch (InterruptedException e) { }
}
return state;
}
/** An example of thread that will continue to run until
* the creating object tells the thread to STOP.
*/
public void run() {
while (checkState()!=STOP) {
...
}
}
}