제목이 설명이므로 최대 시간 동안 스레드를 기다리고 싶습니다. 이제 1 초가됩니다. 다른 스레드가 응답을 수신하면 괜찮습니다. 그렇지 않으면 1 초 후에 응답이 수신되는지 여부를 기다리지 않고 작업을 계속해야합니다. 나중에 응답이 도착했는지 확인하기 위해 2 초 기다릴 수 있습니다.자바 - 최대 시간 또는 이벤트 (비동기 콜백)를 기다리는 중입니다.
메인 등급 :
atiReq.Now(); //asynchronous method returns immediatly
firstATIState = atiReq.getState(1000); // Wait for a max of 1000 ms to get the response
}
handleIDP();
if (isMobSub && firstATIState == null) {
//If ati response was not recived previously wait for another maximum 2000 ms now
firstATIState = atiReq.getState(2000);
}
AtiRequest 등급 :
,243,232 10문제점 : getState와의 대응 코드를 볼 수
firstATIState = atiReq.getState(1000);
이 라인은, 메인 클래스에서, 1 초 후에 종료 나던
while (!atiResponseRecieved) {
try {
atiReq.wait(timeout);
} catch (InterruptedException ex) {
logger.error("Error waiting on atiReq while trying to get aitState", ex);
}
}
는이다 (긴 제한 시간)에있어서 그래서 atiReq.wait (timeout)이 1 초 내에 반환되고 atiResponseRecieved가 true가 아닌 경우에도 Now() 메서드의 시간 제한이 다할 때까지 루핑을 계속 유지하고 atiResponseRecieved를 true로 설정합니다.
질문 :이 문제를 해결하려면 어떻게
? 루프에서 제거하려고 시도했지만 "가짜 깨어"완전히 1 초 기다리지 마라.
다른 해결 방법이 있습니까?
Java Thread.sleep() 또는 Object.wait()는 스케줄러의 컨텍스트 전환에 의존하기 때문에 스레드를 다시 시작하거나 깨우기위한 정확한 타이밍을 보장하지 않습니다. –
정기적으로 보시면 무엇을 보시고, 허위 모닝콜이 아닙니다. 플랫폼에 따라 절대 또는 전혀 특별한 상황이 발생하지 않습니다. –