0Pricing
Java Academy · Lección

El modelo de concurrencia estructurada

Trate las tareas relacionadas como una unidad

El modelo de concurrencia estructurada 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.

Qué es la concurrencia estructurada

La concurrencia estructurada (JEP 453, API de vista previa) trata un grupo de tareas concurrentes relacionadas como una única unidad de trabajo.

Si la tarea principal se divide en subtareas, todas deben completarse antes de que la tarea principal continúe, de forma muy parecida al ámbito de un bloque en el código ordinario.

El problema que resuelve

Con executors sin estructura, una tarea creada puede sobrevivir a quien la creó, filtrarse o quedar olvidada. Los errores de una rama pueden pasar desapercibidos mientras las demás continúan ejecutándose.

Esto provoca fugas de hilos, trabajo huérfano y una gestión confusa de los errores.

Las tareas forman un árbol

La concurrencia estructurada impone una relación entre la tarea principal y sus tareas secundarias. Las subtareas forman un árbol cuya raíz es la tarea que las inició.

  • Una subtarea no puede sobrevivir al ámbito de su tarea principal
  • La tarea principal espera a que todos sus hijos terminen
  • La cancelación se propaga hacia abajo por el árbol

Reflejar el código secuencial

La idea fundamental es que el código concurrente se lea como código secuencial. Se abre un ámbito, el trabajo se divide y el ámbito se cierra solo después de que todo se haya unido.

Esto hace evidentes los tiempos de vida y facilita el razonamiento sobre los errores.

La antigua forma no estructurada

Este es un enfoque conocido, pero no estructurado, que utiliza un executor simple. Funciona, pero nada garantiza que los dos futuros compartan un tiempo de vida coordinado.

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
            Future<String> user = exec.submit(() -> "Ada");
            Future<Integer> order = exec.submit(() -> 7);
            System.out.println(user.get() + " has " + order.get() + " orders");
        }
    }
}

Por qué es importante coordinar

En el ejemplo anterior, si falla la obtención del usuario, la tarea del pedido sigue ejecutándose sin utilidad. Debe cancelarla manualmente y gestionar las excepciones de cada llamada a get().

La concurrencia estructurada automatiza esta coordinación.

Estado de vista previa

La concurrencia estructurada se distribuye como una API de vista previa en el paquete java.util.concurrent. Para usarla, debe compilar y ejecutar con --enable-preview.

La clase central es StructuredTaskScope, que se tratará en la siguiente lección.

Garantías del ciclo de vida

Dentro de un ámbito estructurado:

  • Todas las subtareas se completan, fallan o se cancelan antes de que finalice el ámbito
  • Ninguna subtarea queda ejecutándose en segundo plano
  • La pila de llamadas refleja la jerarquía real de tareas en los volcados de hilos

Ventaja de la observabilidad

Como el árbol de subtareas es explícito, las herramientas del JDK pueden mostrarlo. Un volcado de hilos agrupa las subtareas bajo su ámbito principal, lo que facilita mucho más el diagnóstico que tener hilos dispersos de un pool.

Se combina bien con los hilos virtuales

Cada subtarea de un ámbito estructurado se ejecuta en su propio hilo virtual de forma predeterminada. El bajo coste de los hilos virtuales es lo que hace práctico distribuir el trabajo entre muchas subtareas.

Ambas funcionalidades se diseñaron para trabajar conjuntamente.

Modelo mental

Considere un ámbito estructurado como un bloque try-with-resources para la concurrencia: lo abre, inicia el trabajo, espera con join y después lo cierra. La llave de cierre garantiza que no quede nada ejecutándose.

Comprobación rápida

Compruebe cuánto ha comprendido del principio fundamental.

Resumen

Ha conocido el modelo de concurrencia estructurada:

  • Las tareas relacionadas forman un árbol vinculado al ciclo de vida de un ámbito
  • El código concurrente se lee como código secuencial
  • Es una API en vista previa que requiere --enable-preview
  • Se combina de forma natural con los hilos virtuales

A continuación: la propia API StructuredTaskScope.

Preguntas frecuentes

¿La lección «El modelo de concurrencia estructurada» es gratis?

Sí — el texto completo de «El modelo de concurrencia estructurada» 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 «El modelo de concurrencia estructurada»?

Trate las tareas relacionadas como una unidad 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 «El modelo de concurrencia estructurada»?

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. El modelo de concurrencia estructurada
  2. StructuredTaskScope
  3. Cierre por fallo y por éxito
  4. Gestión de errores y cancelación
← Volver a Java Academy