What I would like to know is whether I should use System.currentTimeMillis() or System.nanoTime()<
I've had good experience with nanotime. It provides wall-clock time as two longs (seconds since the epoch and nanoseconds within that second), using a JNI library. It's available with the JNI part precompiled for both Windows and Linux.