Dostałem ciekawą "podróży w czasie" problem dzisiaj, korzystając z następującego kodu:śledzenia w Javie Czas: używając currentTimeMills()
for (int i = 0; i < 1; i++){
long start = System.currentTimeMillis();
// Some code here
System.out.print(i + "\t" + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
// Some code here
System.out.println("\t" + (System.currentTimeMillis() - start));
}
I mam wynik
0 15 -606
I wydaje się, że nie jest to powtarzalne. Czy ktoś ma jakieś wskazówki na temat tego, co wydarzyło się w środku podczas biegu? Po prostu ciekawy ...
Nowa edycja: Użyłem małego testu, aby potwierdzić odpowiedzi poniżej. I uruchomić program i zmienić czas systemowy podczas biegu, a wreszcie powtórzyć „podróży w czasie”:
0 -3563323 163
Sprawa zamknięta. Dzięki chłopaki!
Więcej słów: zarówno currentTimeMillis(), jak i nanoTime() są oparte na czasomierzu, więc nie będą monotoniczne, jeśli zegar systemowy zostanie zaktualizowany (w odwrotnej kolejności). W takich przypadkach lepiej jest korzystać z niektórych zegarów internetowych.
Nie jestem pewien, czy 'currentTimeMillis' jest monotoniczne. Możesz mieć lepsze wyniki z 'System.nanoTime()', który jest zaprojektowany specjalnie do mierzenia odstępach czasu. – Rom1
@ asksw0rder: czy możesz ponownie uruchomić ten sam program i zaktualizować drugie wyjście? –
@ asksw0rder Jaka jest zmienna i? Jaka jest wartość? Nie ma sensu, aby uzyskać 0 na pierwszym wyjściu. – sfrj