2008-10-29 16 views
9

Jestem w trakcie pisania kawałka kodu, który łączy się z serwerem spawnuje kilka wątków używających tego połączenia i robi garść "rzeczy".Zatrzymywanie wątku w Javie?

Istnieją pewne przypadki, w których połączenie się nie udaje i muszę zatrzymać wszystko i zacząć od nowa z nowym obiektem.

Chciałem posprzątać po obiekcie, ale wywołując thread.stop na wątkach, ale ta metoda jest pozornie przestarzała.

Jaka jest zalecana alternatywa dla tego? Czy powinienem napisać własną metodę oczyszczania i wyjścia dla każdego wątku? Ustaw wątek na wartość null? albo coś innego?

Odpowiedz

1

Korzystanie your_thread.interrupt i sprawdzić w swoim wątku jeśli Thread.interrupted() return true. Jeśli tak, zamknij poprawnie wątek.

3

Zakładając, że twoje wątki są rozsądnie pod twoją kontrolą - tzn. Nie wywołują niczego, co może trwać wiecznie bez wykonywania kodu - zamknęłbym go za pomocą prostego (ale wątkowo bezpiecznego - użyj volatile!) flaga.

Aby zobaczyć przykład w języku C#, należy zapoznać się z this article - odpowiednik Java powinien być łatwy do opracowania. Wywołanie interrupt nie będzie miało żadnego efektu, dopóki wątek nie będzie czekał, a stop może pozostawić twoją aplikację w stanie trudnym do przewidzenia. Tam gdzie to możliwe, zamiast tego idź na czyste, uporządkowane wyłączenie.

1

Użyłem this bardzo prosty przykładowy wzór. Wydaje się działać i jest łatwa do zrozumienia i wdrożenia.

1
private Thread m_CleanupThread = null; 

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

Ten wątek zostanie zakończony, a moduł do zbierania śmieci wykona resztę.

Powiązane problemy