Uma vez terminada, uma thread não pode ser “restartada”.
Você terá que instanciar um novo objeto da classe thread. Mas não vejo razãop para isso “paulear” sua aplicação.
Se vc vai iniciar/finalizar muitas threads, o ideal é usar o ExecutorService, pois ele implementa um pool de threads para você.
Assim, mesmo que seu Runnable termine, a thread em si não é finalizada.
Exemplo:
Crie um pool sem limites de threads. Se quiser limitar, use o FixedThreadPool
private ExecutorService threadPool = Executors.newCachedThreadPool();
Use o método submit para iniciar o seu Runnable numa das threads do pool
O método fica bloqueado até que existam threads disponíveis.
No caso do cachedThreadPool, não há limites de threads. As threads morrem se, depois de um minuto, não receberem runnable nenhum.
threadPool.submit(umRunnable());