Pregunta de entrevista para Desarrollador Java

¿Qué son los hilos virtuales y cómo cambian la forma de escribir código de servidor?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Los hilos virtuales, definitivos desde Java 21, son hilos ligeros que la JVM planifica sobre un pool pequeño de hilos portadores. Cuando uno se bloquea en E/S se desmonta y libera a su portador, así que un millón de tareas concurrentes cuesta muy poco. En la práctica vuelves a escribir código bloqueante directo y usas un hilo por petición en lugar de un executor con pool fijo, y nunca haces pooling de hilos virtuales porque crear uno es barato.

Por qué lo preguntan los entrevistadores

Es el mayor cambio en la concurrencia de Java en una década, así que separa a quien sigue la plataforma de quien se quedó en Java 8. El entrevistador quiere oír el comportamiento de desmontaje, que los hilos virtuales ayudan con E/S bloqueante y no con trabajo intensivo en CPU, y que hacerles pooling es un antipatrón. Además abre el tema del pinning, los thread locals y cómo limitas ahora la concurrencia.

Cómo estructurar tu respuesta

  • Defínelos como hilos planificados por la JVM y de creación barata.
  • Explica el montaje y desmontaje sobre un hilo portador durante las llamadas bloqueantes.
  • Di qué cambia en tu código: un hilo por tarea, sin pooling.
  • Nombra los límites: trabajo intensivo en CPU, pinning, coste de los thread locals.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Un hilo virtual lo planifica la JVM y no el sistema operativo, así que cuesta unos cientos de bytes en lugar de un megabyte de pila. Cuando se bloquea leyendo un socket, se desmonta de su hilo portador y el portador se va a ejecutar otra cosa, y luego vuelve a montarse cuando llegan los datos. Eso hace desaparecer el viejo motivo para hacer pooling de hilos. Yo uso un executor que crea un hilo virtual por tarea, y el código sigue siendo código bloqueante normal, mucho más fácil de leer y depurar que una cadena de callbacks. Tengo dos cosas presentes. Primera, no hacen nada por el trabajo intensivo en CPU, porque sigues teniendo tantos núcleos como tienes; la ganancia está en atender peticiones con mucha E/S. Segunda, eliminan el límite de concurrencia accidental que me daba un pool fijo, así que si llamo a una base de datos con un pool de cincuenta conexiones pongo delante un semáforo o el propio pool, o si no diez mil hilos virtuales se le echan encima a la vez.

¿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 funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué hace que un hilo virtual haga pinning de su portador, y sigue siendo un problema?
  • ¿Cómo limitas la concurrencia hacia un recurso downstream sin un pool de hilos?
  • ¿Por qué son más caros los thread locals cuando tienes un millón de hilos?

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

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot