Java Memory Model JSR-133 happens-before volatile when volatile is insufficient synchronized Comparison: Java volatile vs Go atomic vs C++ acquire/release