Остановить поток в Java? - PullRequest
       34

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

9 голосов
/ 29 октября 2008

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

В некоторых случаях происходит сбой соединения, и мне нужно все остановить и начать с нуля с новым объектом.

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

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

Ответы [ 6 ]

16 голосов
/ 29 октября 2008

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

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

3 голосов
/ 29 октября 2008

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

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

2 голосов
/ 29 октября 2008

Есть вопрос с очень похожей темой:

Как быстро и чисто прервать поток в java

1 голос
/ 27 августа 2012
private Thread m_CleanupThread = null; 

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

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

1 голос
/ 03 декабря 2011

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

1 голос
/ 29 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...