2012-01-02 5 views
2

일시 중단 된 스레드를 모두 가져 와서 어떻게 종료합니까? 대부분의 시간을 일시 중지 된 TImer-0이라는 스레드를 시작하는 웹 응용 프로그램에서 작업하고 있습니다. 아파치 서버를 종료하면 표시됩니다. 심각한 문제 : 웹 응용 프로그램 [/ LoggingMonitor]이 [Timer-0]하지만 멈추지 못했습니다. 이렇게하면 메모리 누수가 발생할 가능성이 큽니다.일시 중지 된 스레드를 죽이십시오

+0

Thread.suspend로 일시 중지 되었습니까? 아니면 일반적으로 어떤 활동도하지 않는다는 뜻입니까? – Tudor

+0

이것은 다음에 대한 후속 조치입니다. http://stackoverflow.com/questions/8677008/catalina-out-memory-leak-error – oers

+1

컨테이너가 스레드를 관리하게하십시오. 장기간에 걸쳐 많은 고통을 덜어줍니다. –

답변

2

스레드를 일시 중지하고 싶지는 않습니다. 그러면 스레드가 일시 중단되어 전체 프로세스가 작동하지 않을 수 있습니다. 스레드를 일시 중단 한 경우에도 스레드를 중지하면 도움이되지 않습니다.

Timer-njava.util.Timer과 비슷합니다. 이 메시지는 cancel으로 전화하여 해결할 수 있습니다. 메모리 누출이없는 한 스레드는 결국 수집해야합니다 (finalizer에 의해 취소됨).

+0

응용 프로그램을 디버깅 할 때 다른 모든 스레드가 실행 중이지만 타이머 -o 스레드가 대부분 일시 중단 된 것으로 나타났습니다. – Rookie

+0

timer.cancel()을 사용하고 있습니다. 서블릿의 onContextDestroyed에서 괜찮습니까? – Rookie

2

스레드를 죽이지 말고 대신 사용하는 리소스 (gc에 의해 해제 된 메모리)를 해제하고 스케줄러가이를 중지하도록해야합니다. Thread.stop은 더 이상 사용되지 않습니다 (일시 중지와 마찬가지로).
스레드를 수동으로 중지해야하는 경우 here 또는 here in the answers처럼 플래그를 사용하십시오.

관련 문제