Поток, который должен быть остановлен, может выйти сам по себе через определенное время.
Например, если он выполняет всю работу в цикле, он может периодически проверять (например, каждые 10 итерацийloop), если прошло максимальное количество времени, и выйдите в случае, если время прошло.
Время от времени основной поток может проверять поток, завершивший задание (или преждевременно завершивший), и удалять их.