Qualcuno può indicarmi una documentazione che chiarisca che un 'Future.get` con un timeout di 0 non aspetterà?Comportamento di future.get con 0 timeout
I documenti API per java.util.concurrent.Future
non rendono esplicito il comportamento di future.get(0, unit)
. Stando da solo, l'affermazione "Aspetta se necessario per al massimo il tempo stabilito ..." implica che questa invocazione non aspetterà affatto, ma dato il comportamento di vecchia data di Object.wait(0)
(attesa infinita), sono nervoso per dipendere su un comportamento "nessuna attesa" di future.get(0, unit)
Scansione la fonte di alcune classi JDK fornito (vale a dire. FutureTask
) vedo che questa particolare implementazione di Future
non aspetta quando il timeout è 0.
I' mi piacerebbe poter dire
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
ma sono nervoso per un futuro applicazione di tale come un attesa infinita, così invece, ho codificato esplicitamente il modo in cui mi aspetterei che funzioni:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
@skaffman Grazie per la correzione dei tag. – mwhidden