Deadlock isn't so bad - at least it is obvious when it occurs. The real problems in threading happen when you have race conditions that you can't debug because you can't replicate. In languages like C++ this can give you inexplicable seg faults in code far from the bug that don't even give you a place to start looking.