¿Alguien me puede indicar alguna documentación que deja en claro que un 'Future.get' con un tiempo de espera de 0 no esperará?Comportamiento de future.get con 0 tiempo de espera
Los documentos API para java.util.concurrent.Future
no hacen explícito el comportamiento de future.get(0, unit)
. Parado por sí mismo, la afirmación "Espera si es necesario para, como máximo, el tiempo dado ..." implica que esta invocación no esperará en absoluto, pero dado el comportamiento de larga data de Object.wait(0)
(espera infinita), estoy nervioso de depender en un comportamiento "no esperar" de future.get(0, unit)
el escaneo de la fuente de algunas clases de JDK-proporcionado (a saber. FutureTask
) Veo que esta implementación particular de Future
no espera cuando el tiempo de espera es 0.
I' me gustaría poder decir
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
pero estoy nervioso por un Futuro implementación que a medida que una espera infinita, así que en vez, he codificado explícitamente la forma en que se puede esperar que funcione:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
@skaffman Gracias por la reparación de la etiqueta. – mwhidden