Czy w Javie jest stoper? W google znajduję tylko kod stoperów, które nie działają - zawsze zwracają 0 milisekund.
Ten kod, który znalazłem, nie działa, ale nie rozumiem dlaczego.
public class StopWatch {
private long startTime = 0;
private long stopTime = 0;
private boolean running = false;
public void start() {
this.startTime = System.currentTimeMillis();
this.running = true;
}
public void stop() {
this.stopTime = System.currentTimeMillis();
this.running = false;
}
//elaspsed time in milliseconds
public long getElapsedTime() {
long elapsed;
if (running) {
elapsed = (System.currentTimeMillis() - startTime);
} else {
elapsed = (stopTime - startTime);
}
return elapsed;
}
//elaspsed time in seconds
public long getElapsedTimeSecs() {
long elapsed;
if (running) {
elapsed = ((System.currentTimeMillis() - startTime) / 1000);
} else {
elapsed = ((stopTime - startTime) / 1000);
}
return elapsed;
}
}
currentTimeMillis()
do produkcji, ponieważ jest on powiązany z datą / godziną systemową i nie gwarantuje się monotonii (np. Możesz uzyskać ujemny upływający czas). Do mierzenia wykorzystania czasunanoTime()
- gwarantuje, że będzie monotonna i przeznaczona dokładnie do pomiaru czasu. Zobacz docs.oracle.com/javase/8/docs/api/java/lang/…Odpowiedzi:
Znajdziesz go w
http://commons.apache.org/lang/
To jest nazwane
Ale z grubsza robi to samo, co twoje. Jeśli potrzebujesz większej precyzji, użyj
Zobacz także to pytanie tutaj:
Pomiar czasu narzutu w Javie
źródło
Użyj klasy guawy
Stopwatch
.źródło
getStartTime()
, brakisRunning()
apacza ahhhhTeraz możesz spróbować czegoś takiego:
Dane wyjściowe są zgodne z ISO 8601.
źródło
Wiosna zapewnia elegancką
org.springframework.util.StopWatch
klasę (moduł sprężynowy).źródło
Użyj,
System.currentTimeMillis()
aby uzyskać godzinę rozpoczęcia i godzinę zakończenia oraz obliczyć różnicę.Więcej informacji w tym samouczku
źródło
Kod nie działa, ponieważ zmienna elapsed w
getElapsedTimeSecs()
nie jestfloat
lubdouble
.źródło
Nie ma wbudowanego narzędzia Stopwatch, ale od JSR-310 (Java 8 Time) możesz to zrobić po prostu.
Nie przetestowałem tego poprawnie, ale myślę, że użycie stopera Guavy jest bardziej skuteczne.
źródło
spróbuj tego http://introcs.cs.princeton.edu/java/stdlib/Stopwatch.java.html
to bardzo proste
Ta klasa jest częścią stdlib.jar
źródło
Prosty po wyjęciu z pudełka Klasa stopera:
Stosowanie:
źródło
użyj: com.google.common.base.Stopwatch, to proste i łatwe.
przykład:
zadanie to zajęło 112 młynów
źródło
Spróbuj tego
źródło
Spróbuj tego:
Posługiwać się:
źródło
Spróbuj tego.
Stosowanie:
Konsola:
źródło
currentTimeMillis()
jest powiązany z datą / godziną systemową i nie ma gwarancji, że będzie monotonny (np. możesz uzyskać ujemny upływ czasu).System.nanoTime()
aby zawsze uzyskać prawidłowe wyniki.Performetrics zapewnia wygodną klasę Stopwatch, dokładnie taką, jakiej potrzebujesz. Może mierzyć czas zegara ściennego i nie tylko: mierzy również czas procesora (czas użytkownika i czas systemowy), jeśli potrzebujesz. Jest mały, darmowy i można go pobrać z Maven Central. Więcej informacji i przykładów można znaleźć tutaj: https://obvj.net/performetrics
Możesz przekonwertować metryki na dowolną jednostkę czasu (nanosekundy, milisekundy, sekundy itp.)
PS: Jestem autorem narzędzia.
źródło
Możesz znaleźć wygodny tutaj:
https://github.com/varra4u/utils4j/blob/master/src/main/java/com/varra/util/StopWatch.java
Stosowanie:
źródło
Spróbuj tego.
W pełni działające rozwiązanie Java Stopwatch
Tutaj otrzymasz w pełni działające rozwiązanie.
Tylko fragment powyższego rozwiązania:
Możesz utworzyć klasę taką jak w poniższym kodzie i użyć metody start i stop tej klasy przed i po sekcji kodu, aby zmierzyć czas.
}
Dziękuję Ci.
źródło