Stavo controllando il codice sorgente della libreria standard Java 8 solo per curiosità, e ho trovato questo in java/lang/Object.java
. Esistono tre metodi denominati wait
:
-
public final native void wait(long timeout)
: questo è il nucleo di tutti i metodi di attesa, che ha un'implementazione nativa. -
public final void wait()
: chiama solowait(0)
. - E poi c'è
public final void wait(long timeout, int nanos)
.
JavaDoc per il metodo particolare mi dice:
This method is similar to the wait method of one argument, but it allows finer control over the amount of time to wait for a notification before giving up. The amount of real time, measured in nanoseconds, is given by:
1000000*timeout+nanos
Ma questo è il modo in cui il metodo raggiunge "un controllo più preciso sulla quantità di tempo di attesa":
if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}
wait(timeout);
Quindi questo metodo fondamentalmente fa un rozzo arrotondamento di nanosecondi ai millisecondi. Per non parlare del fatto che qualsiasi valore inferiore a 0,5 ms sarà comunque arrotondato a 1 ms.
Questo pezzo di codice è cattivo / non necessario o mi manca qualche virtù invisibile per dichiarare questo metodo e suo nessun argomento cugino come sono?