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