Threads are fine as long as they do not share mutable data structures. For example, multithreaded application servers are a rather painless experience.
Yup, this is the conclusion of Joe Armstrong and why Erlang/Elixir/BEAM just doesn't allow mutable state, other than process dictionary which is inherently non-shared.