Estoy sincronizando algunas cosas, que no puedo simplemente poner en un bucle largo. Y necesito cronometrarlos para ver cuánto tardan en completarse, pero parece que el temporizador tiene una precisión de 15-16 ms en java. ¿Cómo puedo evitar esto?Precisión del temporizador en java
Respuesta
¿Ha intentado utilizar System.nanoTime()?
Desde el Javadoc:
devuelve el valor actual del temporizador del sistema disponible más precisa, en nanosegundos.
Este método solo se puede usar para medir el tiempo transcurrido y no está relacionado con ninguna otra noción del sistema o la hora del reloj de pared. El valor devuelto representa nanosegundos desde algún tiempo fijo pero arbitrario (tal vez en el futuro, por lo que los valores pueden ser negativos). Este método proporciona una precisión de nanosegundos, pero no necesariamente una precisión de nanosegundos. No se hacen garantías sobre la frecuencia con la que cambian los valores. Las diferencias en las llamadas sucesivas que abarcan más de aproximadamente 292 años (2 nanosegundos) no calcularán con precisión el tiempo transcurrido debido al desbordamiento numérico.
Por ejemplo, para medir el tiempo que toma algo de código para ejecutar:
largo horaInicio = System.nanoTime(); // ... el código que se está midiendo ... long estimatedTime = System.nanoTime() - startTime;
Clocks and Timers - General Overview
Java Programación de API para relojes y temporizadores La absoluta reloj "de tiempo de día" está representado por el método System.currentTimeMillis(), que devuelve un milisegundo representación de la hora del reloj de pared en milisegundos desde la época. Como tal, utiliza el reloj "time of day" del sistema operativo. La resolución de actualización de este reloj es a menudo la misma que la interrupción del temporizador (por ejemplo, 10ms), pero en algunos sistemas son fijos, independientemente de la tasa de interrupción.
El reloj de tiempo relativo se representa por el método System.nanoTime() que devuelve un tiempo "de funcionamiento libre" en nanosegundos. Esta vez solo es útil para comparar con otros valores de nanoTime . El método nanoTime utiliza el reloj de resolución más alta disponible en la plataforma y, aunque su valor de retorno es en nanosegundos, la resolución de actualización suele ser de solo microsegundos. Sin embargo, en algunos sistemas no hay más remedio que utilizar la misma fuente de reloj como para currentTimeMillis() - afortunadamente esto es rara y afecta sobre todo a los viejos sistemas Linux y Windows 98.
- 1. Precisión del temporizador OpenVMS, mejor que la precisión de milisegundos.
- 2. ¿Cuál es la precisión máxima del temporizador en .NET?
- 3. tareas programadas del temporizador de Java
- 4. programa de tareas del temporizador de Java
- 5. reiniciar el temporizador en Java
- 6. Precisión de la multiplicación de doble precisión en java?
- 7. Retrollamada del temporizador en C++
- 8. C Rellamada del temporizador
- 9. Temporizador en el hilo de Java
- 10. C# Funciones del temporizador?
- 11. AnyEvent pregunta del temporizador
- 12. ¿Cómo configurar un temporizador en Java?
- 13. Simulando hardware de baja precisión en Java
- 14. Recuperación de precisión en lucene java
- 15. Problemas de precisión Java BigDecimal
- 16. Implementación del temporizador de JavaScript
- 17. Temporizador del lado del servidor PHP?
- 18. Sobrecarga del temporizador en la aplicación C#
- 19. Java precisión temporal en Windows XP vs Windows 7
- 20. Dilema de precisión del compás
- 21. Precisión del doble después del punto decimal
- 22. ¿Cómo Java String.format con una precisión variable?
- 23. biblioteca temporizador en C
- 24. ¿Cómo mostrar las tostadas dentro del temporizador?
- 25. Cambiar el temporizador del núcleo de Linux
- 26. Trabajo del temporizador desde un SPWeb
- 27. org-temporizador en emacs
- 28. Crear un recordatorio de temporizador repetitivo en Java
- 29. Esperando a que termine el temporizador en Java
- 30. temporizador genérica en OCaml
je, me Me encanta esa frase: "Las diferencias en las llamadas sucesivas que abarcan más de aproximadamente 292 años (263 nanosegundos) no calcularán con precisión el tiempo transcurrido debido al desbordamiento numérico". Debería haber un concurso para el programa de software de mayor duración sin interrupción/mal funcionamiento. –