Understanding Java Memory Model: How I Debugged a Concurrency Bug Without Locks

Digging deep into volatile, instruction reordering, and the JVM Memory Model to fix an elusive race condition.