Languages
- A race occurs when correctness depends on thread timing; shared mutable state needs coordination.
- Prefer higher-level concurrent collections and executors to ad hoc thread management.
- Visibility and atomicity are separate properties; volatile does not make compound updates atomic.
