Saltar al contenido
Logotipo de Trainontech Trainontech

Lenguajes y Fundamentos de Programación · LNG-142

Java avanzado: colecciones, streams y concurrencia

Colecciones, streams y concurrencia en Java, con las trampas de la memoria compartida bien señaladas.

Bajo demanda Avanzado 8 módulos · 40 clases

Formato asíncrono Desarrollo Java

Lo que aprenderás

  • Elegir la colección adecuada comparando coste de acceso, inserción y recorrido en cada estructura.
  • Transformar datos con la API de streams usando map, filter, reduce y collect encadenados.
  • Escribir expresiones lambda y referencias a método sobre las interfaces funcionales del JDK.
  • Lanzar tareas con ExecutorService y recoger resultados mediante Future y CompletableFuture.
  • Detectar condiciones de carrera y proteger el estado compartido con synchronized y bloqueos explícitos.
  • Medir el rendimiento de una alternativa con JMH antes de dar por buena una optimización.

Contenido del curso

8 módulos · 40 clases en vídeo · práctica guiada en cada módulo

Módulo 1 · Presentación y método de medida 4 clases
  • Qué se asume y qué se revisa
  • Preparar el proyecto con Maven y JMH
  • Cómo se mide en la máquina virtual sin engañarse
  • Calentamiento, JIT y resultados falsos
Módulo 2 · Framework de colecciones 6 clases
  • List: ArrayList frente a LinkedList
  • Set: HashSet, LinkedHashSet y TreeSet
  • Map: HashMap, TreeMap y factor de carga
  • Deque y colas de prioridad
  • Colecciones inmutables y vistas
  • Elegir estructura con coste y memoria en la mano
Módulo 3 · Lambdas e interfaces funcionales 5 clases
  • Sintaxis de lambda y captura de variables
  • Function, Predicate, Supplier y Consumer
  • Referencias a método
  • Optional y el fin del null defensivo
  • Componer funciones
Módulo 4 · API de streams 5 clases
  • Fuente, operaciones intermedias y terminal
  • map, filter, flatMap y sorted
  • Reducciones y collectors
  • Agrupar y particionar resultados
  • Streams paralelos: cuándo ayudan y cuándo no
Módulo 5 · Hilos y modelo de memoria 5 clases
  • Crear y coordinar hilos
  • Visibilidad, volatile y publicación segura
  • Condiciones de carrera reproducibles
  • synchronized, ReentrantLock y ReadWriteLock
  • Interbloqueos: cómo se producen y cómo se ven
Módulo 6 · Concurrencia de alto nivel 5 clases
  • ExecutorService y tipos de pool
  • Future, CompletableFuture y composición asíncrona
  • Colecciones concurrentes y atómicas
  • CountDownLatch, Semaphore y barreras
  • Hilos virtuales: qué cambian
Módulo 7 · Rendimiento y memoria 5 clases
  • Perfilado con herramientas del JDK
  • Asignación de objetos y presión sobre el recolector
  • Cadenas, buffers y copias innecesarias
  • Micromediciones con JMH bien planteadas
  • Optimizaciones que no compensan
Módulo 8 · Caso práctico: procesador de registros concurrente 5 clases
  • Lectura por lotes de ficheros de registro
  • Transformación con streams y agregación
  • Reparto del trabajo entre hilos
  • Pruebas de concurrencia y detección de carreras
  • Entrega: informe con mediciones antes y después

Requisitos

  • Programación orientada a objetos en Java: clases, interfaces, herencia y genéricos básicos.
  • JDK 17 o superior instalado, con un entorno de desarrollo y Maven o Gradle.
  • Haber trabajado con pruebas automatizadas, aunque sea a nivel elemental.

Descripción

En cuanto un programa Java crece, aparecen dos frentes que deciden si funciona o no: la estructura de datos elegida y lo que ocurre cuando varios hilos tocan lo mismo. Son también las dos áreas donde más código se escribe por costumbre, con un ArrayList para todo y un synchronized puesto por si acaso, sin saber qué se está pagando.

El curso recorre el framework de colecciones comparando implementaciones con mediciones reales, introduce la API de streams como forma de expresar transformaciones sin bucles anidados y entra después en concurrencia: hilos, ejecutores, colecciones concurrentes y el modelo de memoria de Java. Cada concepto se acompaña de un programa que falla de manera reproducible y que hay que corregir.

Al terminar se sabe justificar una estructura de datos, escribir código concurrente que no dependa de la suerte y medir antes de optimizar. Es la preparación para trabajar con frameworks de servidor, procesamiento por lotes o servicios de alta carga, donde estas decisiones se toman a diario y sus errores solo se manifiestan en producción.

¿Para quién es este curso?

  • Desarrolladores Java con proyectos en producción que afrontan problemas de rendimiento o de concurrencia.
  • Backend developers que preparan servicios de alta carga y necesitan justificar sus decisiones técnicas.
  • Personas que revisan código Java ajeno y deben detectar accesos inseguros al estado compartido.
Bajo demanda

Curso diseñado con la ficha cerrada. Se produce al confirmarse un grupo o un contrato.

Código
LNG-142
Nivel
Avanzado
Público
Desarrollo
Entorno
Java

Este curso incluye

  • 40 clases en vídeo bajo demanda
  • Práctica en entornos web y simuladores, sin instalar nada
  • Tutorización en el campus
  • Acceso desde móvil, tableta y ordenador
  • Actualizaciones cuando cambia la versión de la herramienta
  • Certificado de finalización

Sigue aprendiendo

Cursos relacionados

PY-106Lenguajes y Fundamentos de Programación

Concurrencia: multihilo y multiproceso

Paralelizar adquisición de datos y tareas de E/S sin introducir errores difíciles de reproducir.

Python

Avanzado 33 clases

PY-107Lenguajes y Fundamentos de Programación

Testing y TDD en Python

Pruebas unitarias, fixtures y desarrollo dirigido por pruebas en proyectos técnicos reales.

Python

Avanzado 34 clases

PY-131Lenguajes y Fundamentos de Programación

Webscraping con agentes de IA en local

Agentes que navegan y extraen datos sin depender de servicios en la nube.

PythonOllama

Avanzado 34 clases