2013-03-22 2 views
0

내 응용 프로그램은 blockingQueue를 사용하는 데몬 스레드를 시작합니다. kill -3을 사용하여 죽이면 앱이 완전히 멈추지 않으며 스택 결과는 여전히 BlockingQueue.take()을 기다리고 있음을 보여줍니다. 깨끗한 종료에 도움이BlockingQueue.take()로 인해 Java VM이 종료되지 않습니다.

모든 제안을 깊이

...When it is killed using kill -3, the app doesnt stop cleanly and the... 

보통 자바 응용 프로그램은 킬 -3를 사용하여 종료하지 않습니다 ...

+0

작업 관리자에서 java.exe를 강제 종료하십시오. – sgowd

+0

이 데몬 스레드의'Runnable'은 어떻게 생겼습니까? –

+0

종료시 대기열을 중단 할 수 있습니다 –

답변

1

당신 말을 감상 할 수있다.

Kill SIGQUIT (-3)은 Java 스레드 덤프를 수행하는 데 사용됩니다.

특별한 신호 처리 훅을 사용하는 경우,이 동작을 변경할 수 있습니다 죽일 -9 -15

를 사용해보십시오.

는 편집 :

또한, 제어, 깨끗한 자바 응용 프로그램 종료 앱에서 유래한다.
중단 할 How to gracefully handle the SIGKILL signal in Java

+1

명쾌한 설명에 감사드립니다. Kill -2는 나를 위해 작동하며 앱을 완전히 종료합니다 (모든 런타임 후크 호출). – qwerty

0

BlockingQueue#take 응답 한 번 봐, 그래서 당신은 단순히 당신이 take 메소드를 실행 스레드를 중단하고 (즉, 방법을 종료하여) 적절하게 던져 InterruptedException을 처리하는지 확인해야합니다.

문제의 스레드가 스레드 풀에서 관리하는 경우 shutdownNow 풀을 사용할 수 있으므로 스레드도 중단됩니다.