如果您想要最高精度,請使用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");
}
我已經嘗試過,但我的問題是,我正在做一個在一個單獨的類中的偵聽器中的所有這一切。每當它再次開始監聽時,我之前記錄的時間戳變量都會被擦除,而當我嘗試使用它時,我會得到空值。如何防止這個變量(雙)失去其數據? –