programing

자바에도 스톱워치가 있나요?

yoursource 2022. 12. 1. 23:42
반응형

자바에도 스톱워치가 있나요?

자바에도 스톱워치가 있나요?
구글에서는 스톱워치가 작동하지 않는 코드만 찾았습니다.항상 0밀리초가 반환됩니다.

내가 찾은 이 코드는 작동하지 않는데 왜 그런지 모르겠다.

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;
  }
}

에서 찾을 수 있습니다.

http://commons.apache.org/lang/

라고 합니다.

org.apache.commons.lang.time.StopWatch

하지만 그것은 대략적으로 당신과 같다.더 정확한 정보를 원하신다면

System.nanoTime()

다음 질문도 참조하십시오.

Java에서의 시간 측정 오버헤드

Guava의 클래스를 사용합니다.

경과시간을 나노초 단위로 측정하는 객체입니다.에의 직접 콜 대신에, 이 클래스를 사용해 경과 시간을 측정하면 편리합니다.System.nanoTime()몇 가지 이유로 인해:

  • 테스트 또는 성능상의 이유로 대체 시간원을 대체할 수 있습니다.
  • nanoTime에 의해 문서화되어 있듯이 반환된 값은 절대적인 의미가 없으며 다른 시각에 nanoTime에 의해 반환된 다른 타임스탬프에 상대적인 것으로 해석될 뿐입니다.스톱워치는 절대값이 아닌 이러한 상대값만 표시하므로 보다 효과적인 추상화입니다.
Stopwatch stopwatch = Stopwatch.createStarted();
doSomething();
stopwatch.stop(); // optional

long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS);

log.info("that took: " + stopwatch); // formatted string like "12.3 ms"

이제 다음과 같은 작업을 수행할 수 있습니다.

Instant starts = Instant.now();
Thread.sleep(10);
Instant ends = Instant.now();
System.out.println(Duration.between(starts, ends));

출력은 ISO 8601에 있습니다.

봄은 우아함을 선사한다.org.springframework.util.StopWatchclass (spring-core모듈)

StopWatch stopWatch = new StopWatch();

stopWatch.start();
// Do something
stopWatch.stop();

System.out.println(stopWatch.getTotalTimeMillis());

사용하다System.currentTimeMillis()시작 시간과 종료 시간을 가져오고 차이를 계산합니다.

class TimeTest1 {
  public static void main(String[] args) {

    long startTime = System.currentTimeMillis();

    long total = 0;
    for (int i = 0; i < 10000000; i++) {
      total += i;
    }

    long stopTime = System.currentTimeMillis();
    long elapsedTime = stopTime - startTime;
    System.out.println(elapsedTime);
  }
} 

자세한 내용은 이 튜토리얼을 참조하십시오.

Stopwatch 유틸리티는 내장되어 있지 않지만 JSR-310(Java 8 Time)부터는 간단하게 실행할 수 있습니다.

ZonedDateTime now = ZonedDateTime.now();
// Do stuff
long seconds = now.until(ZonedDateTime.now(), ChronoUnit.SECONDS);

아직 벤치마킹은 제대로 하지 않았지만 Guava의 Stopwatch를 사용하는 것이 더 효과적이라고 생각합니다.

경과변수로 인해 코드가 동작하지 않습니다.getElapsedTimeSecs()이 아니다float또는double.

이것을 시험해 보세요.

/*
 * calculates elapsed time in the form hrs:mins:secs
 */
public class StopWatch
{ 
    private Date startTime;

    public void startTiming()
    {
        startTime = new Date();
    }

    public String stopTiming()
    {
        Date stopTime = new Date();
        long timediff = (stopTime.getTime() - startTime.getTime())/1000L;
        return(DateUtils.formatElapsedTime(timediff));
    }

}

용도:

StopWatch sw = new StopWatch();
...
sw.startTiming();
...
String interval = sw.stopTiming();

개봉 즉시 사용할 수 있는 Stopwatch 클래스:

import java.time.Duration;
import java.time.Instant;

public class StopWatch {

    Instant startTime, endTime;
    Duration duration;
    boolean isRunning = false;

    public void start() {
        if (isRunning) {
            throw new RuntimeException("Stopwatch is already running.");
        }
        this.isRunning = true;
        startTime = Instant.now();
    }

    public Duration stop() {
        this.endTime = Instant.now();
        if (!isRunning) {
            throw new RuntimeException("Stopwatch has not been started yet");
        }
        isRunning = false;
        Duration result = Duration.between(startTime, endTime);
        if (this.duration == null) {
            this.duration = result;
        } else {
            this.duration = duration.plus(result);
        }

        return this.getElapsedTime();
    }

    public Duration getElapsedTime() {
        return this.duration;
    }

    public void reset() {
        if (this.isRunning) {
            this.stop();
        }
        this.duration = null;
    }
}

사용방법:

StopWatch sw = new StopWatch();
sw.start();
    // doWork()
sw.stop();
System.out.println( sw.getElapsedTime().toMillis() + "ms");

이거 먹어봐.

public class StopWatch { 

      private long startTime = 0;
      private long stopTime = 0;

      public StopWatch()
      {
            startTime = System.currentTimeMillis();
      }

      public void start() {
        startTime = System.currentTimeMillis();
      }

      public void stop() {
        stopTime = System.currentTimeMillis();
        System.out.println("StopWatch: " + getElapsedTime() + " milliseconds.");
        System.out.println("StopWatch: " + getElapsedTimeSecs() + " seconds.");
      }

      /**
       * @param process_name
       */
      public void stop(String process_name) {
            stopTime = System.currentTimeMillis();
            System.out.println(process_name + " StopWatch: " + getElapsedTime() + " milliseconds.");
            System.out.println(process_name + " StopWatch: " + getElapsedTimeSecs() + " seconds.");
      }      

      //elaspsed time in milliseconds
      public long getElapsedTime() {
          return stopTime - startTime;
      }

      //elaspsed time in seconds
      public double getElapsedTimeSecs() {
        double elapsed;
          elapsed = ((double)(stopTime - startTime)) / 1000;
        return elapsed;
      }
} 

사용방법:

StopWatch watch = new StopWatch();
// do something
watch.stop();

콘솔:

StopWatch: 143 milliseconds.
StopWatch: 0.143 seconds.

com.google.common.base 를 사용합니다.스톱워치는 간단하고 간단합니다.

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>

예:

Stopwatch stopwatch = new Stopwatch();
stopwatch.start();

"Do something"

logger.debug("this task took " + stopwatch.stop().elapsedTime(TimeUnit.MILLISECONDS) + " mills");

이 작업은 112개의 밀이 필요했다

이거 먹어봐

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

public class millis extends JFrame implements ActionListener, Runnable
    {

     private long startTime;
     private final static java.text.SimpleDateFormat timerFormat = new java.text.SimpleDateFormat("mm : ss.SSS");
     private final JButton startStopButton= new JButton("Start/stop");
     private Thread updater;
     private boolean isRunning= false;
     private final Runnable displayUpdater= new Runnable()
         {
         public void run()
             {
             displayElapsedTime(System.currentTimeMillis() - millis.this.startTime);
         }
     };
     public void actionPerformed(ActionEvent ae)
         {
         if(isRunning)
             {
             long elapsed= System.currentTimeMillis() - startTime;
             isRunning= false;
             try
                 {
                 updater.join();
                 // Wait for updater to finish
             }
             catch(InterruptedException ie) {}
             displayElapsedTime(elapsed);
             // Display the end-result
         }
         else
             {
             startTime= System.currentTimeMillis();
             isRunning= true;
             updater= new Thread(this);
             updater.start();
         }
     }
     private void displayElapsedTime(long elapsedTime)
         {
         startStopButton.setText(timerFormat.format(new java.util.Date(elapsedTime)));
     }
     public void run()
         {
         try
             {
             while(isRunning)
                 {
                 SwingUtilities.invokeAndWait(displayUpdater);
                 Thread.sleep(50);
             }
         }
         catch(java.lang.reflect.InvocationTargetException ite)
             {
             ite.printStackTrace(System.err);
             // Should never happen!
         }
         catch(InterruptedException ie) {}
         // Ignore and return!
     }
     public millis()
         {
         startStopButton.addActionListener(this);
         getContentPane().add(startStopButton);
         setSize(100,50);
         setVisible(true);
     }
     public static void main(String[] arg)
         {
         new Stopwatch().addWindowListener(new WindowAdapter()
             {
             public void windowClosing(WindowEvent e)
                 {
                 System.exit(0);
             }
         });
         millis s=new millis();
         s.run();
     }
}

http://introcs.cs.princeton.edu/java/stdlib/Stopwatch.java.html 를 사용해 보세요.

그것은 매우 쉽다

Stopwatch st = new Stopwatch();
// Do smth. here
double time = st.elapsedTime(); // the result in millis

이 클래스는 stdlib의 일부입니다.항아리

Performetrics는 편리한 Stopwatch 클래스를 제공합니다.벽시계 시간 등을 측정할 수 있습니다.필요한 경우 CPU 시간(사용자 시간 및 시스템 시간)도 측정할 수 있습니다.작고 무료이며 메이븐 센트럴에서 다운로드 할 수 있습니다.상세한 것에 대하여는, https://obvj.net/performetrics 를 참조해 주세요.

Stopwatch sw = new Stopwatch();
sw.start();

// Your code

sw.stop();
sw.printStatistics(System.out);

// Sample output:
// +-----------------+----------------------+--------------+
// | Counter         |         Elapsed time | Time unit    |
// +-----------------+----------------------+--------------+
// | Wall clock time |             85605718 | nanoseconds  |
// | CPU time        |             78000500 | nanoseconds  |
// | User time       |             62400400 | nanoseconds  |
// | System time     |             15600100 | nanoseconds  |
// +-----------------+----------------------+--------------+

메트릭을 임의의 시간 단위(나노초, 밀리초, 초 등)로 변환할 수 있습니다.

PS: 저는 이 툴의 작성자입니다.

여기에서는 편리한 것을 찾을 수 있습니다.

https://github.com/varra4u/utils4j/blob/master/src/main/java/com/varra/util/StopWatch.java

사용방법:

final StopWatch timer = new StopWatch();
System.out.println("Timer: " + timer);
System.out.println("ElapsedTime: " + timer.getElapsedTime());

이거 먹어봐.

Java Stopwatch 풀가동 솔루션

여기에서는, 완전하게 기능하는 솔루션을 얻을 수 있습니다.

상기 링크된 솔루션의 일부입니다.

아래 코드와 같은 클래스를 만들 수 있으며, 코드 섹션 전후에 이 클래스의 Start 및 Stop 메서드를 사용하여 소요시간을 측정할 수 있습니다.

public class Stopwatch{
  private long startTime;
  private long stopTime;

  /**
   starting the stop watch.
  */
  public void start(){
        startTime = System.nanoTime();
  }

  /**
   stopping the stop watch.
  */
  public void stop()
  {     stopTime = System.nanoTime(); }

  /**
  elapsed time in nanoseconds.
  */
  public long time(){
        return (stopTime - startTime);
  }

  public String toString(){
      return "elapsed time: " + time() + " nanoseconds.";
  }

}

감사해요.

이거 드셔보세요.

import java.util.concurrent.TimeUnit;
import com.google.common.base.Stopwatch;

public class StopwatchTest {
     
    public static void main(String[] args) throws Exception {
        Stopwatch stopwatch = Stopwatch.createStarted();
        Thread.sleep(1000 * 60);
        stopwatch.stop(); // optional
        long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS);
        System.out.println("Time in milliseconds "+millis);
        System.out.println("that took: " + stopwatch);
    }
}

당신이 필요로 하는 모든 것이 들어 있는 스톱워치를 만들었습니다.

녹화까지 했어요!

그리고 빠른 사용을 위해 컴파일도 했습니다.

다음은 예를 제시하겠습니다.

//...
  //For demo only!
  public static void main(String[]a){
    final Stopwatch stopwatch=new Stopwatch();
    stopwatch.start();
    try{
      java.lang.Thread.sleep(1000);
    }catch(Exception e){}
    stopwatch.split();
    System.out.println("Time elapsed in nanoseconds: "+stopwatch.getTimeElapsed());
    System.out.println("Time elapsed in milliseconds: "+stopwatch.getTimeElapsed(Stopwatch.millis));
    System.out.println("Time elapsed in seconds: "+stopwatch.getTimeElapsed(Stopwatch.seconds));
    try{
      java.lang.Thread.sleep(1000);
    }catch(Exception e){}
    stopwatch.split();
    final long[][] laps=stopwatch.getLaps();
    for(long[] lap:laps){
      System.out.println(java.util.Arrays.toString(lap));
    }
  }
//...

홍보용이 아니라 코딩 수업에 시간을 낭비하지 않기 위해 만든 입니다!

언급URL : https://stackoverflow.com/questions/8255738/is-there-a-stopwatch-in-java

반응형