Thread features and obstacles
Parallelism, independent code parts may be executed on different processes.
Shared memory, different threads may share the same data.
The program may be more responsible by proper division to threads.
Synchronization (locks, semaphores), exact policy for accessing any shared data.
Programs extremely hard to debug and test.
The program may be dead-locked if over synchronized, on the other hand the program may be incorrect if threads are not synchronized enough.