2014-10-02 2 views
0
나는 두 개의 스레드를 사용하려면

페처클라이언트, 작업이 앞서클라이언트 스레드의 입력 스트림 을 읽고 몇 가지 큐에 넣어하는 것입니다 프리 페처를 호출 할 수 있습니다. 클라이언트은 대기열에서 데이터를 검색하여 ... 처리합니다. 예외가 발생프리 페 경우원래의 다른 스레드에서 예외를 다시 발생시키는 방법은 무엇입니까?

지금, 나는 대기열에 보류 예외를 둘 필요하므로가이 큐에 그 시점에 도달하면 클라이언트 예외 걸립니다. 질문은

, 나는 프리 페 스레드에서 잡은 (IO) 예외를해야합니다,하지만 난 클라이언트 스레드 상에 appropiate 예외를 던질 필요가있다.

내 첫 번째는 그냥 잡으려고하고 다른 스레드에서 다시 시도합니다. 하지만 ... 분명히 예외의 스택 추적을 망칠까요?

그럼 새 예외로 간단하게 포장해야합니까? 그것은 "원인"이 다른 스레드에서 왔음을 의미합니다. 문제가 발생할 수 있습니까? 또는 원래 예외를 완전히 버려야합니다. 어떻게 든 가능하다면 클라이언트에 의해 던져진 예외에 최대한 많은 정보를 보존하고 싶습니다.

이 상황을 처리하는 데 유용한 관용구는 무엇입니까?

+0

아니요, throwing은 예외의 스택 추적에 아무 것도하지 않습니다. 스택 추적은 인스턴스를 만들 때 채워집니다. –

+1

새 예외로 포장하십시오. 그래서 휴식이 확실합니다. –

+0

이 패턴은 웹 서비스에서 요청을 구문 분석하는 것과 같이 많이 발생합니다. 일반적으로 비즈니스 로직보다 낮은 레벨에서 오류 처리가 발생해야하는 저수준 (IOException은 분명히 자격이 있음). 프리 페처에서 수행 할 수없는 경우 프리 페처와 클라이언트 사이에 전용 오류 처리 계층을 추가하여 오류 처리가 비즈니스 논리와 분리되도록하는 것이 좋습니다. – Floegipoky

답변

0

원래 예외를 새로운 예외로 래핑하는 것이 더 좋습니다.

관련 문제