使用System.currentTimeMillis()测量时间差

时间:2012-10-25 05:48:27

标签: java time

我有一个简单的java程序,我想知道一些操作之间的时差。对于这个问题,细节并不重要,但让我们采取以下方案。

long beginTime = System.currentTimeMillis();

//Some operations. Let us asssume some database operations etc. which are time consuming.

//

long endTime = System.currentTimeMillis();

long difference = endTime - beginTime;

当代码在机器上运行时,差异有多可靠?

让我们说,处理器开始从我的代码中执行一些指令,然后将上下文提供给另一个进程,该进程执行一段时间,然后返回执行与此java进程相关的指令。

那么,时差应该取决于我机器的当前状态,即运行的进程数等等?因此,在运行某些操作所需的分析时间内,这种机制不可靠吗?

2 个答案:

答案 0 :(得分:12)

System.currentTimeMillis()的粒度取决于实现和操作系统,通常大约为10毫秒。

而是使用System.nanoTime()返回最精确的可用系统计时器的当前值,以纳秒为单位。请注意,您只能使用它来计算经过时间,不能将其值用作绝对时间。

示例:

long startTime = System.nanoTime();
// do something you want to measure
long elapsedTimeNs = System.nanoTime() - startTime;

答案 1 :(得分:2)

我认为你的代码会很好,因为在几个项目中都使用了相同的代码。我不认为如果你的代码调用其他数据库进程等,那么它对你的时间有任何影响。在这种情况下它应该可以正常工作。

实施例

Main Process Started
long beginTime = System.currentTimeMillis();
.
.
.
Called another process (DB or command etc) -> (Another Process start)
                                               .
<Now in this time main process is waiting>     .
                                               .
                                               .
Returned from process                      <- (Another Process end)
.
.
long endTime = System.currentTimeMillis();
long difference = endTime - beginTime;

现在,这个差异将是主要流程所需的总时间,包括另一个流程所花费的时间。这个时间是参考主要工艺和机器的。没关系。