시간 초과가 0 인 'Future.get'이 기다리지 않는다는 것을 명확히하는 문서를 누군가가 가르쳐 줄 수 있습니까?timeout이 0 인 future.get의 동작
java.util.concurrent.Future
에 대한 API 문서는 future.get(0, unit)
의 동작을 명시 적으로 나타내지 않습니다. 자체적으로 서서, "필요한 경우 최대 대기 시간 ..."이라는 문구는이 호출이 전혀 대기하지 않는다는 것을 의미하지만, 오랫동안 지속되는 동작 인 Object.wait(0)
(무한 대기)을 감안할 때, 나는 (즉. FutureTask
)가 나는 시간 제한 내가 '0
때 Future
이 특정 구현을 기다리지 않고 볼 일부 JDK에서 제공하는 클래스의 소스를 스캔 future.get(0, unit)
의 "아니오 대기"행동에 d는 말할 수있는 것을 좋아한다
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
나는 미래에 관해 신경 작용에 의하다 무한 대기로, 그래서 대신 내가 명시 적으로 그것을 내가이 일을 기대할 수있는 방법을 코딩 한 것을 구현 : 그 도움이된다면 나는 몇 가지 코드에서 당신을 가리킬 수 있습니다
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
@skaffman 태그 수정에 감사드립니다. – mwhidden