race conditions - shared variables may have indeterminate state because several threads access them concurrently without sufficient locking; deadlock - two or more threads reach a stalemate when they try to acquire locks or other resources in a conflicting way; livelock - similar to deadlock but resulting in endless wastage of CPU time; starvation - one or more threads fail ever to get any work done, compromising the intended outcome of the software algorithms.