That code will not execute precisely once when 'millis()' returns a multiple of 1000, but will execute many times. The buffering effect of the serial data stream may make it look as though it runs continuously. Remember that the Arduino runs at 16MHz and 'millis() % 1000' will be zero for an entire millisecond. During that millisecond, Serial.write will be called many times.
Thanks Anachrocomputer, that makes sense. Will modify the code when I get home.
I think I might be doing quite a few of these time based executions in my code ( calling something more productive that Serial.print), thinking of coding up an event scheduler. Before I waste my time does anyone know of one thats already some lib out there that would suffice?