如果您想要最高精度,请使用System.nanoTime()。尽管如此,System.currentTimeMillis()也适用于你。
此方法提供纳秒的精度,但不一定纳秒的分辨率(即频率变化值) - 无担保除了分辨率至少为的currentTimeMillis作为造好()。
只是使用这些方法中的任何一种来实现一个简单的计时器。
private static final class Timer {
private long start;
private long end;
static double toSeconds(long nanos) {
return nanos/1000000000.0;
}
void start() {
end = -1;
start = System.nanoTime();
}
double getCurrent() {
return toSeconds(System.nanoTime() - start);
}
double stop() {
end = System.nanoTime();
return toSeconds(end - start);
}
boolean isRunning() {
return end == -1;
}
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.start();
doSomething();
if (timer.getCurrent() > 1.0) {
double time = timer.stop();
System.out.println("User completed task 1 in " + time);
}
doSomething();
if (timer.isRunning() && timer.getCurrent() > 1.0) {
double time = timer.stop();
System.out.println("User completed task 1 & 2 in " + time);
}
doSomething();
if (timer.isRunning() && timer.getCurrent() > 1.0) {
double time = timer.stop();
System.out.println("User completed task 1 & 2 & 3 in " + time);
}
System.out.println("All tasks finished");
}
我已经尝试过,但我的问题是,我正在做一个在一个单独的类中的侦听器中的所有这一切。每当它再次开始监听时,我之前记录的时间戳变量都会被擦除,而当我尝试使用它时,我会得到空值。如何防止这个变量(双)失去其数据? –