There is more to working with multithreading than locking code and avoiding deadlocks. You also need to know how to synchronize activities. It is not so hard once you understand.