자바에서는 어떻게 IO 에 timeout 을 겁니까?

vigor96의 이미지

자바에서

Runtime aaa = Runtime.getRuntime();
Process process = aaa.exec("애플리케이션");


BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((inLine = in.readLine()) != null) {
  // 데이타 내용을 읽어서 처리 

}

여기서 "애플리케이션"의 응답이 없으면

무한적으로 기다리게 됩니다.

timeout 을 걸고 싶은데..그 방법을 모르겠습니다.

c/c++ 에서는 timer 를 이용했던 것 같은데.

방법을 알려 주세요..

감사합니다.

baram4x의 이미지

JDK 1.4.x버전에서는 timer객체를 지원합니다.
java.util.Timer 가 있습니다.

그 이전 버전에서는 간단하게 쓰레드로 Timer를
만드셔야 합니다.

그럼.

vigor96의 이미지

쓰레드로 Timer

돌리면 그 IO 에 timeout 이

생기게 할 수 있습니까?

그것에 해당하는 IOException 항목이 보이지 않던데요..

자세히 알려주세요..~~~~~

musik의 이미지

쓰레드를 사용하여 타임아웃을 구현할수는 있습니다.

하지만 그것이 곧 실제 IO 액션에 들어간 쓰레드를 인터럽트 걸어 블록킹에서

깨어나게 한다는 의미는 결코 아닙니다. 블록킹 된 쓰레드는 에러나 eof 일때

까지 계속 멈춰져 있을 것입니다.

예외인 경우는 소켓의 setSoTimeout() 등의 메소드를 이용하는 것입니다.

하지만 이것도 read 에 국한된 사항입니다.

좀 더 근본적인 해결을 위해서, 1.4 의 논블럭킹 IO 를 사용하시기 바랍니다.