Остановка потока на Java?

Я в процессе написания фрагмента кода, который подключается к серверу, порождает кучу потоков, используя это соединение, и делает кучу "материала".

Существуют определенные случаи, когда соединение терпит неудачу, и мне нужно остановить все и начать с нуля с нового объекта.

Я хотел очистить объект после вызова thread.stop в потоках, но этот метод, по-видимому, устарел.

Какова рекомендуемая альтернатива этому? Должен ли я писать свой собственный метод очистки и выхода для каждого из потоков? Установите нить в нуль? или что-то другое?

Ответ 1

Посмотрите здесь:

Предлагаемые методы для остановки потока в HowToStopAThread

Ответ 2

Предполагая, что ваши потоки находятся под вашим контролем, то есть они не назовут что-либо, что будет потенциально ждать навсегда без выполнения вашего кода. Я бы отключил его простым (но потокобезопасным - используйте volatile!) флаг.

См. эту статью для примера на С# - эквивалент Java должен быть прост в разработке. Вызов interrupt не будет иметь никакого эффекта до тех пор, пока следующий поток не будет ждать, а stop может оставить ваше приложение в состоянии с жестким прогнозом. По возможности, отправляйтесь на чистое, упорядоченное выключение.

Ответ 4

Используйте your_thread.interrupt и проверьте свой поток, если Thread.interrupted() возвращает true. Если это так, закройте свою нить правильно.

Ответ 5

Я использовал этот очень простой пример шаблона. Кажется, что он работает, его легко понять и реализовать.

Ответ 6

private Thread m_CleanupThread = null; 

public void threadCleanUp(){
    m_CleanupThread = new Thread(this);
    m_CleanupThread.Start();
}

Этот поток завершится, и сборщик мусора сделает все остальное.