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."); } }
时间: 2024-10-01 18:03:45