2013-03-17 2 views
2

네트워크에서 일부 파일을 가져 오기 위해 Executor Service를 사용하여 일부 스레드를 시작했습니다. 실행 방법이 완료되지 않은 경우에도 일정 시간이 지나면 스레드가 실행을 멈추게합니다. 어떻게 그럴 수 있습니까? 유언 집행자의 shutdown() 및 awaitTermination (...) 메소드도 작동하지 않았습니다.태스크가 완료되지 않은 경우에도 Executor 서비스 스레드를 중지하는 방법은 무엇입니까?

+2

이것은 일반적인 질문 인 "모든 스레드를 중지하는 방법"의 특정 경우 인 것으로 보입니다. 나는 해결책이 동일하거나, 인터럽트되거나 중단되는 것을 허용하는 코드를 스레드 된 코드로 가지고 있다고 믿는다. –

+0

'Future.get (long timeout, TimeUnit unit)'을 사용 해본 적이 없습니까? –

+0

@VishalK 미래의 타임 아웃 (그리고 취소 되더라도), 호버 크라프트의 포인트는 여전히 유효합니다. 스레드는 자신을 중지하는 방법을 모르는 경우 백그라운드에서 계속 실행됩니다. –

답변

4

간단한 대답은 할 수 없다는 것입니다. Thread.stop()은 신뢰성이 낮고 더러운 자원을 남겨두기 쉽기 때문에 long (long long) 이전에는 사용되지 않았습니다.

당신이 할 수있는 유일한 다른 방법은 작업 부하 중에 스레드를 일시 중지하고 종료 조건 (중단되거나 미리 정의 된 시간 제한 초과)을 확인하는 것입니다.

관련 문제