Repaso
English
Java CoreAvanzadoJV-30

¿Qué problema resuelven los virtual threads (Java 21)?

Opciones

  1. Hacen que el código intensivo en CPU vaya más rápido con más núcleos
  2. Código bloqueante simple que escala a cantidades enormes de tareas (Opción correcta)
  3. Reemplazan el garbage collector por uno más barato
  4. Eliminan la necesidad de sincronizar el código compartido

Respuesta

Permiten escribir código bloqueante simple y gestionar cientos de miles de tareas concurrentes, porque son muy baratos y los planifica la JVM, no el sistema operativo

Por qué

Un thread normal (de plataforma) se corresponde 1:1 con un thread del sistema operativo y es costoso, así que un servidor solo puede tener unos pocos miles. Cuando un thread espera I/O (base de datos, HTTP), simplemente se queda ahí ocupando su sitio.

Los virtual threads son threads ligeros gestionados por la JVM. Cuando uno se bloquea en I/O, la JVM lo aparca y ejecuta otro en el mismo thread del sistema operativo. Puedes crear millones.

Ayudan con cargas I/O-bound (los servicios web típicos). NO aceleran el trabajo CPU-bound, y sigues teniendo que proteger los datos compartidos.

try (var ex = Executors.newVirtualThreadPerTaskExecutor()) {
    ex.submit(() -> callSlowService());
}

Recuerda

Virtual threads = bloqueo barato para servidores con mucho I/O.

Términos clave

Practica esta pregunta en Repaso