Ответ 1
Посмотрите здесь:
Предлагаемые методы для остановки потока в HowToStopAThread
Я в процессе написания фрагмента кода, который подключается к серверу, порождает кучу потоков, используя это соединение, и делает кучу "материала".
Существуют определенные случаи, когда соединение терпит неудачу, и мне нужно остановить все и начать с нуля с нового объекта.
Я хотел очистить объект после вызова thread.stop в потоках, но этот метод, по-видимому, устарел.
Какова рекомендуемая альтернатива этому? Должен ли я писать свой собственный метод очистки и выхода для каждого из потоков? Установите нить в нуль? или что-то другое?
Посмотрите здесь:
Предлагаемые методы для остановки потока в HowToStopAThread
Предполагая, что ваши потоки находятся под вашим контролем, то есть они не назовут что-либо, что будет потенциально ждать навсегда без выполнения вашего кода. Я бы отключил его простым (но потокобезопасным - используйте volatile!) флаг.
См. эту статью для примера на С# - эквивалент Java должен быть прост в разработке. Вызов interrupt
не будет иметь никакого эффекта до тех пор, пока следующий поток не будет ждать, а stop
может оставить ваше приложение в состоянии с жестким прогнозом. По возможности, отправляйтесь на чистое, упорядоченное выключение.
Возникает вопрос с очень похожей темой:
Используйте your_thread.interrupt и проверьте свой поток, если Thread.interrupted() возвращает true. Если это так, закройте свою нить правильно.
Я использовал этот очень простой пример шаблона. Кажется, что он работает, его легко понять и реализовать.
private Thread m_CleanupThread = null;
public void threadCleanUp(){
m_CleanupThread = new Thread(this);
m_CleanupThread.Start();
}
Этот поток завершится, и сборщик мусора сделает все остальное.