Java Concurrency in Practice
Java Concurrency in Practice
Resumen:
Introducción
El libro «Java Concurrency in Practice» (autores: Brian Goetz, Tim Peierls, Joshua Bloch y otros) es, sin exagerar, la biblia de la programación concurrente en Java. Publicado en 2006, sigue siendo hasta hoy la fuente de conocimiento más autorizada y profunda sobre el paralelismo en el ecosistema Java. A pesar de que han pasado casi dos décadas desde su publicación, los principios fundamentales descritos en el libro no han quedado obsoletos: el modelo de memoria de Java (JMM), los problemas de visibilidad, atomicidad, ordenamiento, así como los patrones de publicación segura de objetos, siguen siendo relevantes hoy en día.
El libro no es una introducción a Java desde cero; presupone un dominio sólido del lenguaje y una comprensión básica de los hilos. Sin embargo, es precisamente este libro el que transforma al desarrollador de un «usuario de hilos» en un verdadero experto, capaz de diseñar aplicaciones robustas, escalables y seguras para hilos.
De qué trata este libro
«Java Concurrency in Practice» cubre todos los aspectos clave de la programación concurrente en Java, desde los mecanismos de sincronización de bajo nivel hasta las abstracciones de alto nivel del paquete java.util.concurrent. El libro está estructurado de forma lógica: primero explica los problemas básicos de la concurrencia (condiciones de carrera, interbloqueos, problemas de visibilidad), luego analiza las herramientas para resolverlos: synchronized, volatile, final, variables atómicas, bloqueos ReentrantLock, semáforos, barreras. Capítulos aparte están dedicados a las pruebas de código concurrente, el rendimiento y la escalabilidad, así como a temas avanzados como Fork-Join y CompletionService.
Se presta especial atención al modelo de memoria de Java (JMM): comprender el JMM permite al desarrollador evitar errores difíciles de detectar relacionados con la reordenación de instrucciones y el almacenamiento en caché de datos. El libro contiene numerosos ejemplos de código «correcto» e «incorrecto», lo que hace que el material sea visual y práctico.
Para quién es este libro
El libro está dirigido a desarrolladores Java experimentados que ya se han enfrentado a la concurrencia y desean sistematizar sus conocimientos. Será útil para:
- Desarrolladores de aplicaciones de servidor (servicios web, procesamiento de solicitudes, colas de tareas);
- Especialistas en sistemas de alta carga y aplicaciones de baja latencia;
- Arquitectos que diseñan sistemas escalables;
- Quienes se preparan para entrevistas técnicas (especialmente en empresas FAANG);
- Profesores y autores de cursos sobre Java.
Para los principiantes, el libro puede parecer complejo; se recomienda primero dominar los conceptos básicos de concurrencia a través de otras fuentes (por ejemplo, «Thinking in Java» de Bruce Eckel o los tutoriales oficiales de Oracle).
Qué aprenderá el lector
- Problemas principales de la concurrencia: condiciones de carrera, interbloqueos, inanición, inversión de prioridades.
- Seguridad para hilos: cómo diseñar clases que funcionen correctamente cuando se accede desde múltiples hilos.
- Modelo de memoria de Java (JMM): reglas happens-before, garantías de visibilidad, atomicidad y ordenamiento.
- Publicación segura de objetos: cómo hacer que un objeto sea visible para otros hilos sin violar la integridad.
- Herramientas de sincronización: synchronized, volatile, ReentrantLock, ReadWriteLock, StampedLock.
- Clases atómicas: AtomicInteger, AtomicReference, AtomicLong, AtomicReferenceFieldUpdater.
- Pool de hilos y Executor: ThreadPoolExecutor, ScheduledThreadPoolExecutor, ForkJoinPool.
- Colecciones para concurrencia: ConcurrentHashMap, CopyOnWriteArrayList, BlockingQueue, ConcurrentLinkedQueue.
- Pruebas de código concurrente: cómo escribir pruebas que detecten carreras y bloqueos (incluyendo el uso de Thread.yield() y primitivas de sincronización).
Recommendations
Refactorización de código JavaScript (Node.js): del caos al orden
DevOps para desarrolladores de Rust: automatización, CI/CD y despliegue
Código limpio en Kotlin: Escribiendo aplicaciones elegantes y mantenibles
Python Tricks: Un Banquete de Funciones Asombrosas de Python
More Effective C++
Aprendizaje automático con Go