¿Cuál es la diferencia entre synchronized y volatile?
Opciones
- Tienen el mismo efecto, solo cambia la palabra clave
synchronizedbloquea y comparte escrituras;volatilesolo las comparte (Opción correcta)volatilebloquea todo el objeto;synchronizedno bloqueavolatilesolo 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.