2012-03-02 2 views
13

가능한 중복을 Callable.call에서 던진 예외를 잡으려고 :
Handling exceptions from Java ExecutorService tasks
는 어디()

나는 스레드를 조정 자바에서 ExecutorService을 사용합니다. 스레드를 시작하기 위해 나는이 결과를 수집하려면

pool = new ExecutorService(2); 
callableResults = pool.invokeAll(threads); 

을 사용하여, 나는 각 스레드에 대한 future.get()를 사용합니다. "threads"는 Callable을 구현하고 call()을 재정의하는 클래스의 객체 목록입니다.

이제 다음과 같은 문제점이 있습니다. call() 메서드는 여러 가지 예외를 throw합니다. invokeAll()future.get()InterruptedException으로 제한됩니다.

call()에 던져 넣는 예외는 어디에서 찾을 수 있습니까? 아니면 거기에서 그들을 처리해야합니까? 이러한 예외 중 하나가 발생하면 결과는 InterruptedException입니까?

+1

이전에 읽었지만 Callable을 사용하고 call()을 사용하는 것을 보지 못했습니까? 어쩌면 내가 그것을 감독한다!? 편집 : 올바른. 나는 그것을 감독한다. 죄송합니다. – nano7

+2

이 답변 : http://stackoverflow.com/a/2248166/118846 –

+1

그는 Runnable을 사용하지만 예외 catch는 동일합니다. – Gray

답변

23

AFAIR java.util.concurrent.Future.get()은 제공된 호출 가능 객체가 과거에 예외를 던진 경우 ExecutionException을 던졌습니다 (예외는 Future에 저장 됨).

예외를 throw하여 중단 된 작업의 결과를 검색하려고 할 때 throw되는 예외입니다. 이 예외는 Throwable.getCause() 방법을 사용하여 검사 할 수 있습니다.