Java Object.wait () raggiunge davvero la precisione di un nanosecondo?

3

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 solo wait(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?

    
posta Krumia 12.08.2014 - 14:02
fonte

1 risposta

5

Penso che quello che succede sia che la precisione al millisecondo è dietro l'angolo e stanno pensando in avanti.

Poiché è necessario un nuovo metodo, invece di andare per microsecondi i progettisti hanno deciso di passare direttamente ai nanosecondi. Non perché oggi sia necessario per questo livello di precisione, ma per essere pronti per il futuro.

L'implementazione che arrotonda il tempo ai millisecondi è lì per compatibilità. Sarai in grado di sfruttare il nuovo metodo su computer e JVM più veloci, mentre lo stesso codice verrà eseguito su JVM più datati che mappano la chiamata ad una precisione millisecondo.

    
risposta data 13.08.2014 - 23:04
fonte

Leggi altre domande sui tag