Способ, которым я реализовал нечто подобное в прошлом, заключается в реализации метода shutdown()
в моем подклассе Runnable
, который устанавливает переменную экземпляра с именем should_shutdown
в true. Метод run()
обычно что-то делает в цикле и периодически проверяет should_shutdown
, а когда он равен true, возвращает или вызывает do_shutdown()
, а затем возвращает.
Вы должны держать ссылку на текущий рабочий поток под рукой, а когда пользователь изменяет значение, вызовите shutdown()
в текущем потоке и дождитесь его закрытия. Затем вы можете запустить новую тему.
Я бы не рекомендовал использовать Thread.stop
, так как это было устаревшим в прошлый раз, когда я проверял.
Edit:
Прочтите ваш комментарий о том, как ваш рабочий поток просто вызывает другой метод, выполнение которого занимает некоторое время, поэтому вышеприведенное неприменимо. В этом случае ваши единственные реальные варианты - попытаться позвонить по номеру interrupt()
и посмотреть, окажет ли он какое-либо влияние. Если нет, подумайте о том, чтобы как-то вручную вызвать функцию, которую вызывает вызов вашего рабочего потока. Например, звучит так, будто он выполняет какой-то сложный рендеринг, поэтому, возможно, уничтожьте холст и заставьте его сгенерировать исключение. Это не очень хорошее решение, но, насколько я могу судить, это единственный способ остановить поток в подобных ситуациях.