a single thread still obey happens-before relationships. This means that although one thread may write a [synchronized]{} variable, at a later point in time another thread may read an earlier value of this variable.

Acquire-Release Ordering

:   when compared to relaxed ordering introduces some synchronization. In fact, a read operation on [synchronized]{} variables can then be labeled by [*acquire*]{}, a write operation can be labeled by [*release*]{}. Synchronization between release and acquire is pairwise between the thread that issues the release and that acquire operation of a thread that does the first read-acquire after the release.[^1] A thread issuing a read-acquire later may read a different value than that written by the first thread.

  ------------------------ ------------------ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  [**memory order**]{}      [**involved**]{}  [**constraints for reordering memory accesses**]{}
                            [**threads**]{}   [**(for compilers and CPUs)**]{}
  relaxed                          1          no inter-thread constraints
  release/acquire                  2          \(1) ordinary stores originally before [release]{} (in program order) will happen before the release fence (after compiler optimizations and CPU reordering)(2) ordinary loads originally after [acquire]{} (in program order) will take place after the acquire fence (after compiler optimizations and CPU reordering)
  sequentiallyconsistent          all         \(1) all memory accesses originally before the [sequentially\_consistent]{} one (in program order) will happen before the fence (after compiler 