Multithreaded applications can have costs. Don't just multithread-enable an application just because you can. The benefits gained by enabling multithreading should out weight the costs. When in doubt, try measuring the performance or responsiveness of the application, instead of just guessing.
## More Complex Design
Although some parts of a multithreaded application are simpler than a single-threaded application, other parts are more complex. Code executed by multiple threads accessing shared data needs special attention. Thread interaction is far from always simple. Errors arising from incorrect thread synchronization can be very hard to detect, reproduce, and fix.
## Context Switching Overhead
When a CPU switches from executing one thread to execution another, the CPU needs to save the local data, program pointer etc. of the current thread, and load the local data, program pointer etc. of the next thread to execute. This switch is called "context switch". The CPU switches from executing in the context of one thread to executing in the context of another. Context switching isn't cheap. You don't want to switch between threads more than necessary.
## Increased Resource Consumption
Threads need resources from the computer in order to run. Besides CPU time, a thread needs some memory to keep its local stack (execution stack). It may also take up some resources inside the operating system needed to manage the threads.