2009-04-22 3 views
4

나는 단일 스레드 스레드 풀 실행 프로그램 인 java.util.concurrent.Execution 서비스를 가지고있다. 나는 그것에 특정 과제를 제출한다. 태스크가 체크되지 않은 예외를 던지면 스레드는 죽지 만 서비스는 새로운 스레드가 생성되고 이후 작업이 그 스레드에서 수행되도록합니다. 그러나 나는이 기능을 원하지 않고 여전히 threadPoolExecutor를 사용하려고합니다. 즉, 태스크가 검사되지 않은 예외를 throw하면 서비스를 shutDownNow()로 변경합니다.threadpoolexecutor 죽이기

이것을 달성하는 가장 좋은 방법은 무엇입니까? 생성 된 쓰레드의 수를 제한하는 커스텀 쓰레드 팩토리를 사용하면 좋을까요?

답변

3

ThreadPoolExecutor 하위 클래스를 만들고 afterExecute 메서드를 재정의 할 수 있습니다. 이 메소드는 예외가있는 경우 null이 아닌 throwable 매개 변수를가집니다.

2

threadPoolExecutorExecutorCompletionService으로 감쌀 수 있습니다. 계속해서 take()에서 Future을 검색합니다. future.get()Exception 인 경우 threadpoolexecutor.shutdown()으로 전화하십시오.

+0

JUnit에서 ScheduledThreadPoolExecutor를 사용하여 여러 스레드를 실행하는 경우 afterExecute() 메서드를 재정의하는 것과 비교할 때이 메서드에 대한 Throwable 인수가 어떤 이유 때문에 항상 null이기 때문에 매우 유용합니다. –

관련 문제