Java ExecutorService 프레임 워크를 사용하여 실행 가능한 호출 가능 태스크를 제출하고 있습니다. 이러한 작업은 웹 서비스와 통신하며 5 분의 웹 서비스 제한 시간이 적용됩니다. 그러나 어떤 경우에는 제한 시간이 무시되고 API 호출에서 스레드가 '정지'하는 것을 보았습니다. 따라서 5 분보다 오래 걸리는 모든 작업을 취소하고 싶습니다.임계 값보다 오래 걸리는 스레드를 차단하는 모범 사례
현재 선물 목록이 있으며 모든 작업이 완료 될 때까지 future.get을 호출하여 반복합니다. 이제 future.get 오버로드 된 메서드는 시간 초과가 발생하고 해당 창에서 작업이 완료되지 않으면 시간 초과가 발생합니다. 그래서 나는 future.get() 메소드를 사용하여 timeout을 시도했고 TimeoutException의 경우 future.cancel (true)을 사용하여이 작업이 중단되었는지 확인했습니다.
내 주요 질문
1.이 문제를 해결하는 가장 좋은 방법은 시간 초과입니까?
2. 스레드 풀 (아직 활성 직원이 아닙니다)에 배치되지 않은 태스크에 대해 get 호출을 기다릴 가능성이 있습니까? 이 경우 실제로 필요한 시간 제한 내에 완료 될 수있는 스레드를 종료 할 수 있습니까?
모든 제안 사항에 깊이 감사드립니다.
가장 좋은 방법은 등의 예외를 처리, 요구 사항에 따라 변경해야 너무 오래 걸리지 않으며 외부에서 살해 당할 필요가 없도록 작업을 작성합니다. 외부에서 스레드를 중지하는 것은 깨진 작업에 대한 해결 방법입니다. –
http://stackoverflow.com/questions/16277191/executor-service-timeout-of-thread –