`volatile` vs `synchronized` — what problem does each solve? | LetsGit.IT