Вы не можете "перезапустить" поток Java. Как только он завершился, он не может быть перезапущен.
Но это не то, что вы делаете. На самом деле вы постоянно создаете и запускаете (не перезапускаете) новые темы. Это неэффективно, потому что начало и выход потока довольно дороги. Кроме того, «основной» поток опрашивает другие потоки, чтобы определить, живы ли они, что является еще одной неэффективностью.
Там определенно - лучший способ.
Посмотрите на ExecutorService
API. Это позволяет вам отправлять неопределенное количество «задач» в рабочую очередь и обрабатывать их из пула потоков. API заботится о запуске рабочих потоков, прохождении их задач и перезапуске, если они обрабатывают sh. Службы Executor могут быть созданы с пулами фиксированного размера, сжимающимися и растущими пулами, бесконечными ограниченными рабочими очередями и т. Д.
Для получения дополнительной информации; начните с javado c и Oracle учебников по этой теме c.