2013-01-15 1 views
2

나는 많은 선택의 여지가 없다는 것을 알고있다. InterruptedIOException이 소개되었다. 의 서브 클래스가 아니면 안된다. IOException. 당신이 스레드가 중단되거나되지 않은 있는지 여부를 확인할 수안드로이드에서 java.io 메소드는 InterruptedIOException을 던집니까?

있는 InterruptedIOException의 유일한 존재는 doubtlessly 삶 조금 복잡하고 있습니다. InterruptedIOException과 다르게 처리해야하기 때문입니다. 스레드가 중단 된 정보를 유지하려면 IOException을 유지해야합니다. 있는 InterruptedIOExceptionjava.nio의에 대한 발명 동안

는, 적어도 솔라리스, 있는 InterruptedIOException을 던져 java.io 방법이 있다는보고가 있습니다. 또한 새로운 안드로이드 버전을 사용하면 라이브러리가 에서 java.nio으로 마이그레이션되거나 추가 메소드가 어떻게 든 매핑되는 위험이 있습니다.

저는 InterruptedIOException을 고려해야한다고 생각하는 경향이 있습니다.은 안전한쪽에 있어야합니다. 어떻게 보입니까? 통찰력, 경험, 전략?

답변

1

개인적으로 나는 피할 수 있다면 인터럽트를 사용하지 않을 것입니다. IO 작업을 차단하기 위해 휘발성 플래그를 설정하고 대신 스트림을 닫습니다. 클로즈드 플래그가 설정되어있는 경우, 슬로우 된 IOException는 무시됩니다. 이렇게하면 구성 요소가 어떻게 종료되는지 더 자세히 제어 할 수 있습니다. 구성 요소를 closed으로 설정하면 물론 설정을 해제하지 않고 원하는대로 자주 확인할 수 있습니다.

+0

공유 주셔서 감사합니다. 특정 상황에서 스레드를 종료하기 위해 '닫힌'정보를 사용하는 것은 간단하지는 않습니다. 예 : 연결을 유지하는 것을 목표로하는 스레드가있는 경우 (그리고 닫아야 할 경우 다시 열기). –

+0

재 연결을 시도하기 전에'closed' 플래그를 검사해야합니다. 구성 요소가이 작업을 수행하지 않으면 종료/중지/닫기 메서드 –

+0

True를 지원해야합니다. 감사! 저는 현재 인터럽트도 사용하지도 않고 정확히 닫지도 않았지만 인터럽트에 대한 평가는 올바른 방향으로 나를 이끌었습니다. –

관련 문제