Hello!
I have a test about cost of System.currentTimeMillis() and my
CLOCK.currentTimeMillis() .( My clock will be a JVM singleton)
Call currentTimeMillis function 100000000 times, System.currentTimeMillis()
need about 1902ms and my CLOCK.currentTimeMillis() only need 119ms.
The function performance is up to about 15 times.
Next I will use a streaming job to test it.
This is my code:
#########
class MillisecondClock {
private long rate = 0;
private volatile long now = 0;
private volatile boolean isRunning = true;
private MillisecondClock(long rate) {
this.rate = rate;
this.now = System.currentTimeMillis();
start();
}
private void start() {
new Thread(new Runnable() {
@Override
public void run() {
while(isRunning)
{
try {
Thread.sleep(rate);
} catch (InterruptedException e) {
e.printStackTrace();
}
now = System.currentTimeMillis();
}
}
}).start();
}
public long currentTimeMillis() {
return now;
}
public static final MillisecondClock CLOCK = new MillisecondClock(1);
public static void main(String[] args)
{
long nowTime = 0;
//test system currentTimeMillis
long startTime = System.currentTimeMillis();
long endTime;
for(int i = 0;i < 100000000;i++)
{
nowTime = System.currentTimeMillis();
}
endTime = System.currentTimeMillis();
System.out.println("Time cost: " + (endTime-startTime));
//test my currentTimeMillis
CLOCK.start();
startTime = System.currentTimeMillis();
for(int i = 0;i < 100000000;i++)
{
nowTime = CLOCK.currentTimeMillis();
}
endTime = System.currentTimeMillis();
System.out.println("Time cost: " + (endTime-startTime));
}
}
########
Regards
Fengbin Fang