Becouse of the idea behind Thread.run() method. The idea is that every thread has lifecycle and if it expires(finish the run() method block) the thread becomes dead.
If you want to to stop thread for a partition of time and then run it again common way is to implement Runnable interface(or extend Thread class) and got a boolean flag inside.
Here is a simple code :
public class MyThread implements Runnable {
private Thread t;
private boolean isRestarted;
private boolean isInterrupted;
public MyThread() {
t = new Thread(this);
isInterrupted = false;
isRestarted = false;
t.start();
}
public void run() {
//Do somework
while(true) {
if(isInterrupted) break;
if(isRestarted) run();
}
}
public void restart() { isRestarted = true; }
public void interupt() { isInterrupted = true; }
}
Now when the thread isn't interupted it will wait to be restarted. When you interupt it it can't be restarted any more .