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í:
- ¿Cómo calculo la ejecución de un método en Java? 36 respuestas
¿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.