Directorio artículo
1 System.nanoTime () se define
System.nanoTime()
El valor de retorno solamente y 进程已运行的时间有关
, 不受调系统时间影响
.
De acuerdo con el método de nanosegundos comentarios:
Devuelve el valor actual de la fuente de tiempo de alta resolución del Java que se ejecuta de máquina virtual, en nanosegundos.
Este método sólo se puede utilizar para medir el tiempo transcurrido y no se relaciona con cualquier otra noción de sistema o de pared reloj de tiempo. El valor devuelto representa nanosegundos desde algún tiempo origen fijo pero arbitraria (quizás en el futuro, por lo que los valores pueden ser negativos). El mismo origen es utilizado por todas las invocaciones de este método en una instancia de una máquina virtual Java; otras instancias de máquinas virtuales son propensos a utilizar un origen diferente.
Traducido: Devuelve el actual JVM的高精度时间
. Este método sólo se puede utilizar 测量时段
y y 系统时间无关
. Es el valor de retorno de un cierto 固定但随意
punto en el tiempo comienza (probablemente algún momento en el futuro). A diferente JVM
punto de partida de uso puede ser diferente.
Esto es un poco de miedo es el mismo código se corre en máquinas diferentes pueden causar que los resultados difieran. Por lo tanto, rara vez se utiliza para calcular, por lo general se mide 先后顺序
y 时间段
, antes de la prueba netty
clase de herramienta redonda de tiempo ( HasedTimeWheel
) encontró que no es compatible 调系统时间
, tal tarea se realiza 06:00, después de la presentación a la hora de la rueda, cuando el sistema se ajustó a 7 tareas punto no se realiza inmediatamente, pero mirada en HasedTimeWheel
el código que sentirse diseñado para el tiempo de transferencia de apoyo (es decir, transfiere la tarea debe realizarse inmediatamente después de las 7:00), después de la comida de prueba para descubrir tales System.nanoTime()
como 当前时间
, con el fin de apoyar el tiempo de transferencia , sólo hay que System.nanoTime()
sustituir System.currentTimeMillis()
(las unidades de tiempo relevantes tienen que ser cambiado).
System.currentTimeMillis()
retornos de 1970
unos pocos milisegundos a la ahora
2 períodos de tiempo Comparar
System.nanoTime()
Si el valor de retorno es mayor que el orden resta para utilizar 0 para determinar la llamada, pero no puede ser utilizado >
o <
ser juzgado.
System.nanoTime()
Devuelve los valores reales son de 64 bits número sin signo 随着进程运行时间增长, 溢出后再从0开始
, asignados al tipo de código largo correspondiente a como complemento (número con signo ) que se utiliza el valor de naturaleza cíclica de la siguiente manera.:
最小负数 -> 0 -> 最大正数 -> 最小负数 -> ...
Supongamos que hay dos secuencia de llamada desconocida, y el intervalo de tiempo es menos de dos llamadas 2^63ns
(alrededor de 200 + año)
long t1 = System.nanoTime();
long t2 = System.nanoTime();
Si t1
y t2
son positivos o t1
y t2
son negativos, t1
y t2
la diferencia no supera 2^63
, restarlos no se desborde, t1>t2 <=> t1-t2>0
y un gran número debe ser devuelto después de la primera llamada, y mediante la comparación de las restas ><
Los operadores de comparación puede;
si t1 y t2, una positiva y negativa, t2 es un número positivo proporcionado, como valores comparativos son números sin signo, t1 es negativo puede ser conocido después se devuelve una llamada, de modo que el t2> t1 y t2 se deriva después de la primera llamada es un error. Además, suponemos las dos llamadas es inferior a 2 espaciador 63 es , t2-t1
el valor de la constante es mayor que 2 63 es (en long
que es negativo), se t2-t1<0
, en este momento se determina restando siendo correcta.
综上所述,System.nanoTime()是不适合作为数据库主键