1
JavaAdvanced#concurrency
synchronized provides mutual exclusion and visibility for blocks/methods. volatile guarantees visibility (reads see the latest write) but not atomicity. Use volatile for simple flags, synchronized or Locks for compound actions.
private volatile boolean running = true; // visibility only
public synchronized void increment() { count++; } // mutual exclusion + visibility