Last Updated: June 6, 2026
When two threads touch the same data at the same time, the result is often not what either thread expected. A counter increments and loses an update. A total ends up wrong. An order id gets reused. This lesson covers why those problems happen, what an atomic operation actually is, what an intrinsic lock is and how every Java object carries one, and how the synchronized method modifier uses that lock to make a method safe for concurrent use. We'll also look at what holding the monitor costs, why synchronized is reentrant, and where the "just add synchronized" mental model stops being enough.