volatile garantiza visibilidad y ordenación: cualquier hilo que lea ese campo después ve la escritura, y establece una relación happens before, así que también son visibles las escrituras hechas antes. No da atomicidad, así que un incremento de contador sigue siendo una condición de carrera porque son una lectura, una suma y una escritura. Para acciones compuestas usa synchronized, un lock, o una clase atómica como AtomicLong.
Por qué lo preguntan los entrevistadores
Es la forma más limpia de descubrir si alguien entiende el modelo de memoria de Java o solo sabe que volatile significa compartido. El entrevistador quiere la distinción entre visibilidad y atomicidad enunciada con precisión, más un caso de uso válido como una bandera de parada. Las repreguntas suelen ir al double checked locking, a las clases atómicas y a cómo synchronized aporta exclusión mutua y los mismos efectos de memoria.
Cómo estructurar tu respuesta
- Separa la garantía en visibilidad y ordenación.
- Di con claridad qué no hace: las operaciones compuestas siguen teniendo carreras.
- Da un uso legítimo, como una bandera que detiene un bucle.
- Nombra qué usas en su lugar cuando necesitas atomicidad.
Ejemplo de respuesta
volatile significa que una lectura siempre ve la escritura más reciente y no un valor cacheado en un registro o en la caché de un núcleo, y evita que el compilador y el procesador reordenen alrededor. La forma de decirlo en el modelo de memoria es que crea una relación happens before, así que todo lo que hizo el hilo escritor antes de la escritura volatile es visible para el hilo que la lee después. Lo que no me da es atomicidad. Incrementar un contador son tres operaciones, así que dos hilos pueden leer el mismo valor y perderse una actualización por muy volatile que sea el campo. Mi uso válido habitual es un booleano que le dice a un bucle en segundo plano que pare, donde una sola escritura y una sola lectura es exactamente el patrón. Cualquier lectura, modificación y escritura se va a un AtomicInteger, a un LongAdder si está tan caliente que la contención importa, o a un lock si hay que cambiar varios campos a la vez. El otro sitio donde me apoyo en el modelo de memoria es la publicación segura, ya que los campos final están garantizados como visibles tras la construcción, que es una buena razón para hacer las cosas inmutables.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Por qué estaba roto el double checked locking antes de que se arreglara volatile?
- ¿Cómo te da synchronized las mismas garantías de memoria?
- ¿Cuándo usarías LongAdder en lugar de AtomicLong?
Más preguntas para Desarrollador Java
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas