util usar thread example ejemplo create como java timer clock

usar - timer schedule java



¿Cómo calculo el tiempo transcurrido de un evento en Java? (6)

Apache Commons-Lang también tiene la clase StopWatch adecuada para su propósito. Utiliza System.currentTimeMillis (), por lo que todavía tendrá problemas de resolución, pero puede pausar y hacer tiempos de vuelta y tal. Lo uso como estándar ahora para estadísticas de eventos.

http://commons.apache.org/lang/api-release/org/apache/commons/lang/time/StopWatch.html

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es una manera simple / fácil de acceder al reloj del sistema usando Java, para que pueda calcular el tiempo transcurrido de un evento?


Aquí hay una pequeña clase de cronómetro que escribí usando System.nanoTime () como se sugiere en la respuesta de Leigh:

public class StopWatch { // Constructor public StopWatch() { } // Public API public void start() { if (!_isRunning) { _startTime = System.nanoTime(); _isRunning = true; } } public void stop() { if (_isRunning) { _elapsedTime += System.nanoTime() - _startTime; _isRunning = false; } } public void reset() { _elapsedTime = 0; if (_isRunning) { _startTime = System.nanoTime(); } } public boolean isRunning() { return _isRunning; } public long getElapsedTimeNanos() { if (_isRunning) { return System.nanoTime() - _startTime; } return _elapsedTime; } public long getElapsedTimeMillis() { return getElapsedTimeNanos() / 1000000L; } // Private Members private boolean _isRunning = false; private long _startTime = 0; private long _elapsedTime = 0; }


Este es un código de muestra.

long startTime = System.currentTimeMillis(); // Run some code; long stopTime = System.currentTimeMillis(); System.out.println("Elapsed time was " + (stopTime - startTime) + " miliseconds.");


La respuesta de Leigh es correcta.

java.time

Java 8 y posterior tiene incorporado el framework java.time.

Un Instant es un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta 9 dígitos de una fracción decimal de un segundo). El método now toma el momento actual de fecha y hora.

Instant now = Instant.now();

2016-03-12T04: 29: 39.123Z

Puede calcular el tiempo transcurrido entre un par de objetos Instant como una Duration . La duración utiliza una resolución de nanosegundos con un valor máximo de los segundos que pueden mantenerse en un largo. Esto es mayor que la edad estimada actual del universo.

Duration duration = Duration.between( startInstant , stopInstant );

La salida predeterminada de Duration::toString está en formato estándar ISO 8601 . También puede solicitar un recuento total de nanosegundos ( toNanos ) o milisegundos ( toMillis ), así como otros importes.

Java 8

En Java 8, recuperar el momento actual se resuelve solo a una resolución de milisegundos (hasta 3 dígitos de una fracción decimal de un segundo). Entonces, mientras que las clases de java.time pueden almacenar nanosegundos, solo pueden determinar el momento actual con milisegundos. Esta limitación se debe a un problema heredado (la implementación Clock predeterminada usa System.currentTimeMillis() ).

Java 9

En Java 9 y versiones posteriores, la implementación predeterminada de Clock puede determinar el momento actual en hasta una resolución de nanosegundos. En realidad, hacerlo depende de la finura del hardware del reloj de tu computadora.

Consulte esta página de problemas de OpenJDK para obtener más información: aumente la precisión de la implementación de java.time.Clock.systemUTC ()

Micro Benchmark

Si su propósito es la evaluación comparativa, asegúrese de mirar otras Preguntas tales como:

  • ¿Cómo escribo un micro-benchmark correcto en Java?
  • Crear un punto de referencia rápido / confiable con Java?

Los marcos están disponibles para ayudar con el benchmarking de corta duración.


System.currentTimeMillis() usar System.currentTimeMillis() para medir el tiempo transcurrido. System.currentTimeMillis() devuelve el tiempo de ''reloj de pared'', que puede cambiar (p. ej .: ahorro de luz diurna, usuario administrador cambiando el reloj) y sesgar las medidas de intervalo.

System.nanoTime() , por otro lado, devuelve el número de nanosegundos desde ''algún punto de referencia'' (por ejemplo, el inicio de JVM), y por lo tanto no sería susceptible a los cambios del reloj del sistema.


java.lang.System.currentTimeMillis() o java.lang.System.nanoTime() deberían funcionar para medir el tiempo transcurrido.