0Pricing
Java Academy · Lección

Qué son los hilos virtuales

Hilos ligeros en Java 21

Qué son los hilos virtuales es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Bienvenido a los hilos virtuales

Los hilos virtuales llegaron como característica definitiva en Java 21 (JEP 444). Son hilos ligeros gestionados por la JVM en lugar del sistema operativo.

El objetivo es sencillo: permitirle escribir código directo de tipo un hilo por solicitud y, al mismo tiempo, escalar hasta millones de tareas simultáneas.

El problema anterior

Un hilo de plataforma tradicional se corresponde uno a uno con un hilo del sistema operativo. Cada uno consume alrededor de un megabyte de pila y es costoso de crear.

Esto significa que solo puede ejecutar unos pocos miles a la vez. La E/S bloqueante ocupa un hilo completo del sistema operativo mientras espera.

En qué se diferencian los hilos virtuales

Un hilo virtual no posee un hilo del sistema operativo. Muchos hilos virtuales se multiplexan en un pequeño grupo de hilos de plataforma portadores.

  • Son baratos de crear, miles por milisegundo
  • Tienen un consumo de memoria mínimo
  • Una operación bloqueante simplemente estaciona el hilo virtual y libera el portador

Montaje y desmontaje

Cuando un hilo virtual se ejecuta, se monta en un hilo portador. Cuando encuentra una operación bloqueante, se desmonta y libera el portador para que pueda continuar otro trabajo.

Este estacionamiento y reanudación ocurren automáticamente. Su código se lee como código bloqueante convencional.

Un primer hilo virtual

Este es el ejemplo más sencillo posible. Thread.ofVirtual().start(...) inicia un hilo virtual y join() espera a que termine.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual().start(() ->
            System.out.println("Hello from a virtual thread!"));
        vt.join();
        System.out.println("Main is done.");
    }
}

Confirmar que es virtual

Cada Thread expone isVirtual(). Esto le permite verificar en qué tipo de hilo se está ejecutando su código.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual().start(() -> {
            System.out.println("isVirtual: " + Thread.currentThread().isVirtual());
        });
        vt.join();
    }
}

Escalar a muchas tareas

Como los hilos virtuales son baratos, iniciar decenas de miles es completamente normal. Aquí iniciamos 10 000 de ellos.

import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        AtomicInteger counter = new AtomicInteger();
        Thread[] threads = new Thread[10_000];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = Thread.ofVirtual().start(counter::incrementAndGet);
        }
        for (Thread t : threads) t.join();
        System.out.println("Completed: " + counter.get());
    }
}

Asignar nombres a los hilos virtuales

Puede asignar un nombre a un hilo virtual para facilitar la depuración utilizando el builder antes de iniciarlo.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual()
                .name("worker-1")
                .start(() ->
                    System.out.println("Running on: " + Thread.currentThread().getName()));
        vt.join();
    }
}

La misma API, un motor nuevo

Los hilos virtuales implementan exactamente la misma API de Thread que ya conoce. Puede seguir utilizando start, join, sleep e interrupt.

Esto significa que las bibliotecas existentes basadas en Thread y Runnable funcionan sin cambios.

Cuándo usarlos

Los hilos virtuales destacan en cargas de trabajo I/O-bound: servidores web, llamadas a bases de datos y solicitudes a API remotas.

No son más rápidos para cálculos numéricos CPU-bound. En ese caso, sigue estando limitado por el número de núcleos.

No cree un pool

Un cambio de mentalidad importante: no cree pools de hilos virtuales. Cree uno nuevo por tarea y deje que termine cuando finalice la tarea.

Los pools existen para reutilizar recursos costosos. Los hilos virtuales son económicos, por lo que agruparlos en un pool es un anti patrón.

Comprobación rápida

Compruebe su comprensión de los hilos virtuales.

Resumen

Ha aprendido qué son los hilos virtuales y por qué son importantes:

  • Son ligeros, los gestiona la JVM y se finalizaron en Java 21
  • Se multiplexan en hilos portadores mediante el montaje y desmontaje
  • Son ideales para trabajos I/O-bound con alta concurrencia
  • Usan la misma API de Thread, pero se crean por tarea en lugar de agruparse en un pool

A continuación aprenderá las distintas formas de crearlos.

Preguntas frecuentes

¿La lección «Qué son los hilos virtuales» es gratis?

Sí — el texto completo de «Qué son los hilos virtuales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Qué son los hilos virtuales»?

Hilos ligeros en Java 21 Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Qué son los hilos virtuales»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Qué son los hilos virtuales
  2. Creación de hilos virtuales
  3. Hilos de plataforma frente a hilos virtuales
  4. Errores: pinning y ThreadLocals
← Volver a Java Academy