https://medium.com/@roperluo.me/java-multi-threaded-memory-read-and-write-2-understanding-of-memory-barriers-71dae8bfbaa3