The program fails in an unexpected way, but only once every ten or twenty times it is run. This is a hard-to-debug problem: what causes the failure, and how can it be reproduced? In many programming languages, programs that use threads may have this sort of bug.
Most programming languages do not force developers to access all fields in a thread-safe way. So the burden falls on the developer to ensure the code is correct, and a hard-to-reproduce bug will not occur.
One language that enforces thread-safe access to fields is Rust:
In languages like C# or Go it is possible to unsafely modify data while other threads are reading the fields. This can lead to complicated bugs where the program works correctly, but only 99% of the time. Without "fearless concurrency" as in Rust, I feel multithreading should be largely avoided—it is more trouble than it's worth in most cases.