/*
* MeasureThreadSleep.java
*/
/* Sun JDK 1.4.2 or later is required to compile and run this program. */
import sun.misc.Perf;
public class MeasureThreadSleep
{
public static void main(String[] args)
{
if (args.length == 0 || args.length > 2)
{
printUsageAndExit();
}
int millis = Integer.parseInt(args[0]);
int nanos = -1;
if (args.length== 2)
{
nanos = Integer.parseInt(args[1]);
}
Perf perf = Perf.getPerf(); // may throw SecurityException
long ticksPerSecond = perf.highResFrequency();
for (int i = 0; i < 10; i++)
{
try
{
long start;
long end;
if (nanos != -1)
{
start = (perf.highResCounter() * 1000) / ticksPerSecond;
Thread.sleep(millis, nanos);
end = (perf.highResCounter() * 1000) / ticksPerSecond;
}
else
{
start = (perf.highResCounter() * 1000) / ticksPerSecond;
Thread.sleep(millis);
end = (perf.highResCounter() * 1000) / ticksPerSecond;
}
out("measured duration (ms): " + (end - start));
}
catch (InterruptedException e)
{
// IGNORE
}
}
}
private static void printUsageAndExit()
{
out("MeasureThreadSleep: usage:");
out("\tjava MeasureThreadSleep <milliseconds> [<nanoseconds>]");
System.exit(1);
}
private static void out(String strMessage)
{
System.out.println(strMessage);
}
}
/*** MeasureThreadSleep.java ***/