System.currentTimeMillis() can screw things up when the clock is adjusted etc. Better use System.nanoTime()