Concurrency refers to the ability of a system to execute multiple tasks through simultaneous execution or time-sharing, sharing resources and managing interactions. Concurrency improves responsiveness, throughput, and scalability

Excerpts from Concurrent Programming with Harmony by Robbert van Renesse

The Problems with Concurrent Programming

Programming with concurrency is hard. Concurrent programming, a.k.a. multithreaded programming, involves multiple threads running in parallel while sharing variables. As mentioned before, there are two problems with concurrent programming: non-determinism and non-atomicity.