Java Cookbook-Date and Times

6.12 Measuring Elapsed Time

  --Problem

    You need to time how long long it takes to do something

  --Solution

    Call System.currentTimeMillis() twice,or System.nanoTime(),and subtract the first

    ressult from the second result

  --Discussion

    The System class contains two static methods for times.currentTimeMillis() return the current time (since 1970) in milliseconds,and nanoTime()

  (new in 1.5) returns the relative time in nanoseconds.To time some event use this:

 

 long start=System.currentTimeMillis();
  method_to_be_timed();

  long end=System.currentTimeMillis();

  long elapsed=end-start;//time in milliseconds

  or:

  long start=System.nanoTime();

  method_to_be_timed();

  long end=System.nanoTime();

  long elapsed=end-start;//time in nanoseconds

  Here is a short example to measure how long it takes a user to press return.

We divide the time in milliseconds by 1000 to get seconds

and print it nicely using a NumberFormat

  long t0,t1;

  System.out.println("Press return when ready");
  
  t1=System.currentTimeMillis();

  int b;

do{

  b=System.in.read();

}while(b!='\r'&&b!='\n');

  t1=System.currrentTimeMillis();

  double deltaT=t1-t0;

  System.out.println(DecimalFormat.getInstance().format(deltaT/1000.)+"seconds.");

 

 import java.io.*;

 import java.text.*;



  /**

   * Timer for processing sqrt and I/O operations

   */

  public class TimerCompution{

    public static void man(String[] args){

      try{

        new Timer().run();
    }catch(IOException e){System.err.println(e);}
  } 

  public void run()throws IOException{

    DataInputStream n=new DataOutputStream(

      new BufferedOutputStream(new FileOutputStream(SysDep.getDevNull()));
      long t0,t1;
      System.out.println("Java Starts at "+(t0=System.currentTimeMillis()));

      double k;
      for(int i=0;i<100000;i++){

        k=2.1*Math.sqrt((dobule)i);
        n.writeDouble(k);
      }

     System.out.println("Java Ends at "+(t1=System.currentTimeMillis()));
     double deltaT=t1-t0;
     System.out.println("This run took "+
       DecimalFormat.getInstance().format(deltaT/1000.)+" seconds.");
 }   
}

  

posted @ 2015-10-14 12:47  hephec  阅读(158)  评论(0编辑  收藏  举报