If using methods stop/suspend
to stop a thread, this is unsafe and thus deprecated. If a thread being stopped now is modifying common data, that common data remains in an inconsistent state. However, 3 solutions is available as following:
1. let the method run()
of the thread finishes itself, it’s best and have no any unsafe factors, for example:
public class OurThread extends Thread(){ public void run(){ System.out.println("ok") } }
when the console output the string “OK”, this thread ends safely.
2. use a variable indication, in Thread, iterate this variable and check it, e.g while(flag){}
, the indication can be modified outside, if it is modified, thread will be ended.
public class OurThread extends Thread(){ private volatile boolean stop = false; public void run(){ while (!stop) { //Do your actions } } }
Set the variable stop
to volatile, this make sure all reads and writes will go straight to “main memory”.
3. use interrupt()
method and then catch InterruptedException
to stop thread.