The goal is to increase the chances of thread interaction.  It likely will take longer to create the threads, than it will to actually run the doOperation loop.  So we buffer how long each thread should wait (adjusted based off actual time).  That way hopefully all the threads will start the doOperation() point at close to the same time, and that way the Atomic(Whatever) will have to deal with compare and swap failures.