Your two threaded functions/methods are probably working on the same data at the same time, by putting a delay in place it allow's the first thread to change the data before the second one accesses it.It depends on what your functions are actually doing but you may need a single thread that picks jobs from a queue so that each job is completed before the next starts or if the jobs works on seperate data you can have more then one thread pick jobs from a queue so they dont work on the same job.