Start here. This is the direct spoken answer to practice first.
Overview
Happens-before is the guarantee that one action's effects are visible and ordered before another action.
If action A happens-before action B, the effects of A are visible to B and ordered before it according to the Java Memory Model. Examples include releasing a monitor before another thread later acquires the same monitor, writing a volatile field before another thread reads that write, and actions before starting a thread becoming visible in that thread. Program order also establishes happens-before within one thread. Without a valid relationship, concurrent reads may observe stale or surprising state.