`volatile` gwarantuje widoczność (i porządek) zmiennej między wątkami, ale nie robi atomowości dla operacji złożonych. `synchronized` daje wzajemne wykluczanie i jednocześnie zapewnia happens-before (widoczność) dla chronionego fragmentu.
class StopFlag {
private volatile boolean stop = false;
void requestStop() {
stop = true;
}
void runLoop() {
while (!stop) {
// do work
}
}
}