Repaso
English
Java CoreIntermedioJV-26

¿Cuál es la diferencia entre synchronized y volatile?

Opciones

  1. Tienen el mismo efecto, solo cambia la palabra clave
  2. synchronized bloquea y comparte escrituras; volatile solo las comparte (Opción correcta)
  3. volatile bloquea todo el objeto; synchronized no bloquea
  4. volatile solo se aplica a métodos y nunca a campos

Respuesta

synchronized da exclusión mutua más visibilidad; volatile solo garantiza que las lecturas vean la última escritura (sin atomicidad en acciones compuestas)

Por qué

synchronized hace que un solo thread ejecute un bloque a la vez (exclusión mutua) y además hace visibles los cambios al siguiente thread que entra.

volatile en un campo solo garantiza visibilidad: cuando un thread escribe, los demás ven de inmediato el valor nuevo (sin copia obsoleta en caché). NO hace seguro count++, porque son tres pasos: leer, sumar, escribir.

Usa volatile para flags simples (running = false), y synchronized o AtomicInteger para contadores y acciones compuestas.

Recuerda

volatile = solo visibilidad. synchronized = lock + visibilidad.

Términos clave

Practica esta pregunta en Repaso