Java Memory Model and Happens Before? How does it Work?

Java Memory Model and Happens Before? How does it Work?