GNU/Linux >> Tutoriales Linux >  >> Linux

¿System.currentTimeMillis siempre devolverá un valor> =llamadas anteriores?

No podría estar garantizado estar aumentando, basado en el hecho de que el usuario podría potencialmente cambiar el tiempo del sistema entre llamadas.

Además de eso, debería sigue aumentando ya que representa milisegundos desde la época. Si fuera un "horario de pared" normal, tendría que preocuparse por los cambios de hora en un día bisiesto o en el cambio de horario de verano.


No, no siempre será>=todas las llamadas anteriores.

  • Es posible que no aumente cada vez si lo llama varias veces en rápida sucesión desde el mismo hilo (sé que esto es =parte de>=, pero el comportamiento a menudo sorprende a la gente).

  • Si lo llama varias veces en rápida sucesión desde varios subprocesos, podría hacer varias cosas:podría retroceder un poco en el tiempo entre subprocesos en una cantidad muy pequeña, según la implementación y la probabilidad aleatoria.

  • Lo que es más grave, el valor puede retroceder mucho en el tiempo si el usuario (raro) o una sincronización NTP (potencialmente común) ajusta el reloj del sistema.


La respuesta corta es no, System.currentTimeMillis() es no monótono Se basa en la hora del sistema y, por lo tanto, puede estar sujeto a variaciones de cualquier forma (hacia adelante o hacia atrás) en el caso de los ajustes del reloj (por ejemplo, a través de NTP).

System.nanoTime() es monotónico, si y solo si la plataforma subyacente es compatible con CLOCK_MONOTONIC -- consulte los comentarios en el informe de error de Java 6458294 para obtener una buena descripción de algunas circunstancias en las que esto es o no es cierto.

(Y, como anécdota adicional, he observado personalmente (varias veces) System.currentTimeMillis() ejecutar 'hacia atrás', en ausencia de ajustes de reloj, entre subprocesos, es decir, una llamada a ese método en un subproceso devolvió un valor más bajo que una llamada en otro subproceso, aunque ocurrió cronológicamente después en 'tiempo real ')

Si necesita una fuente monotónica, System.nanoTime() en una plataforma que soporta la monotonicidad es tu mejor opción.


Linux
  1. ¿Diferencia entre las llamadas al sistema statvfs() y statfs()?

  2. ¿Cómo obtener el valor de retorno de CHILD PROCESS?

  3. ¿Llamadas al sistema en Windows y API nativa?

  4. ¿Por qué una función principal sin declaración de retorno devuelve el valor 12?

  5. Valor de retorno de x =os.system(..)

Comprender las llamadas al sistema en Linux con strace

Hora del sistema

¿Comando para enviar el contenido del archivo a la salida estándar?

Cómo ver la fecha y hora de reinicio del sistema Linux

¿Qué son las llamadas al sistema Linux y las funciones de biblioteca?

¿Mi sistema fsck cuando reinicie?