📜  Java System.nanoTime() 与 System.currentTimeMillis(1)

📅  最后修改于: 2023-12-03 15:15:57.994000             🧑  作者: Mango

Java System.nanoTime() 与 System.currentTimeMillis

在Java中,有两种方法可以获取当前时间:System.nanoTime() 和 System.currentTimeMillis()。这两种方法在某些方面有所不同,并根据需要使用。

System.nanoTime()

System.nanoTime() 方法返回当前时间(以纳秒为单位)的高精度计时器。这个计时器不受系统时间或时钟更改的影响,因此非常适合用于测量程序执行时间或其他高精度时间测量。

下面是一个使用System.nanoTime()的示例:

long startTime = System.nanoTime();

// some code to measure

long endTime = System.nanoTime();
long elapsedNanos = endTime - startTime;

在这个示例中,我们记录了代码开始执行时的时间(保存在startTime变量中),然后记录了代码执行结束时的时间(保存在endTime变量中)。通过计算两个时间之间的差异,我们可以计算出代码实际执行的时间(以纳秒为单位),并将其保存在elapsedNanos变量中。

需要注意的是,System.nanoTime()方法的起始时间与Java虚拟机(JVM)实例开始时的时间有关,因此使用多个JVM实例运行相同的代码时可能会得到不同的结果。

System.currentTimeMillis()

System.currentTimeMillis()方法返回当前时间(以毫秒为单位)的UTC时间戳。这个时间戳是基于系统时间的,因此可以用于测量程序执行时间以及其他目的。但是,System.currentTimeMillis()方法的精度可能不足以满足特定用例的要求。

下面是一个使用System.currentTimeMillis()的示例:

long startTime = System.currentTimeMillis();

// some code to measure

long endTime = System.currentTimeMillis();
long elapsedMillis = endTime - startTime;

在这个示例中,我们记录了代码开始执行时的时间(保存在startTime变量中),然后记录了代码执行结束时的时间(保存在endTime变量中)。通过计算两个时间之间的差异,我们可以计算出代码实际执行的时间(以毫秒为单位),并将其保存在elapsedMillis变量中。

需要注意的是,System.currentTimeMillis()方法返回的时间戳是基于UTC的,因此可能会受到时区更改的影响。此外,系统时钟更改也可能会影响返回值。