Java 코드의 while 루프에서 NetBeans가 Thread.sleep() 사용에 대해 경고한다는 것을 알게되었으므로이 주제에 대한 연구를 수행했습니다. 주로 문제는 성능 중 하나 인 것 같습니다. 카운터가 아직 자고있는 동안 while 상태가 참이 될 수 있으므로 다음 반복을 기다릴 때 벽 시계 시간을 낭비합니다. 이 모든 것이 완벽하게 이해됩니다.while 루프의 Thread.sleep()
내 응용 프로그램은 원격 시스템에 접속하여 주기적으로 작업 상태를 폴링하고 작업이 완료 될 때까지 기다렸다가 다음 요청을 전송해야합니다. ,
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
(즉, 그것은 몇 초 동안 실행에, 다소 비싼 과정) 상황이 원격 조작을 확인하는 것을 감안할 때이 스레드의 유효한 사용하는 것입니다 : 순간 코드는 논리적으로한다. while 루프에서 sleep()? 이 논리를 구성하는 더 좋은 방법이 있습니까? Timer 클래스를 사용할 수있는 몇 가지 예제를 보았습니다.하지만 여전히 똑같은 직관적 인 논리로 종결되는 것처럼 보이지만 더 많은 복잡성이 던져진 것처럼 이점을 보지 못했습니다.
베어 이 경우 원격 시스템은 직접 제어 할 수도없고 Java로 작성된 것도 아니므로이 시나리오를이 시나리오에서보다 "협조적"으로 변경하는 것은 선택 사항이 아닙니다. 상태에 대한 내 응용 프로그램의 가치를 업데이트하는 유일한 방법은 XML 메시지를 작성하여 보내고 응답을 수신하고 구문 분석 한 다음 필요한 정보를 추출하는 것입니다.
모든 의견이나 의견을 환영합니다.
가 완벽하게 권리입니다. 경고를 피하는 방법은주기 동안 do를 사용하는 것입니다. – kenota
RPC 호출 상태를 폴링하는 데 드는 비용은 10 초간 잠을 자야 할 정도로 높을 필요가 있다고 생각합니다. 1 초가 더 합리적인 것이거나 이전 수면 작업의 수에 따라 더 긴 시간 동안 기다리는 수면 (특정 최대 과정 포함)입니다. –
내가 언급했듯이 원격 조작은 몇 초 동안 실행된다. 일부 경우를 감안할 때 10 초를 너무 짧게하는 경우가 있습니다. –