Errores habituales de concurrencia
Identifique errores habituales de concurrencia: condiciones de carrera, interbloqueos y problemas de visibilidad.
Errores habituales de concurrencia es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 3 de 3. 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 3 lecciones en total.
Introducción
La concurrencia puede introducir errores: condiciones de carrera, interbloqueos, inanición y problemas de visibilidad.
Condiciones de carrera
Las condiciones de carrera ocurren cuando los hilos se intercalan de forma impredecible y producen resultados incorrectos.
Código: condición de carrera
Sin sincronización, los incrementos se solapan y producen conteos incorrectos.
public class Main {
private int count = 0;
public void increment() { count++; }
public static void main(String[] args) throws Exception {
Main obj = new Main();
Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
t1.start(); t2.start();
t1.join(); t2.join();
System.out.println("Count (expected 2000) = " + obj.count);
}
}
Interbloqueo
Interbloqueo: dos hilos mantienen cada uno un bloqueo y esperan el bloqueo del otro, por lo que ambos quedan bloqueados.
Código: interbloqueo
Este código puede provocar un interbloqueo: cada hilo espera indefinidamente el bloqueo del otro.
public class Main {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized(lock1) {
try { Thread.sleep(50); } catch(Exception e) {}
synchronized(lock2) { System.out.println("method1"); }
}
}
public void method2() {
synchronized(lock2) {
try { Thread.sleep(50); } catch(Exception e) {}
synchronized(lock1) { System.out.println("method2"); }
}
}
public static void main(String[] args) {
Main obj = new Main();
new Thread(obj::method1).start();
new Thread(obj::method2).start();
}
}
Código: problema de visibilidad
Sin volatile, es posible que un hilo no vea las actualizaciones de otro debido al almacenamiento en caché.
public class Main {
private static boolean flag = false;
public static void main(String[] args) throws Exception {
Thread writer = new Thread(() -> { flag = true; });
Thread reader = new Thread(() -> { while(!flag) {} System.out.println("Flag seen true"); });
writer.start(); reader.start();
writer.join(); reader.join();
}
}
Comprobación de errores de concurrencia
Comprobación rápida: ¿Qué problema ocurre cuando dos hilos esperan indefinidamente los bloqueos del otro?
Repaso
Repaso: Entre los errores se incluyen las condiciones de carrera, los interbloqueos y los problemas de visibilidad. La sincronización y volatile ayudan a evitarlos.
Preguntas frecuentes
¿La lección «Errores habituales de concurrencia» es gratis?
Sí — el texto completo de «Errores habituales de concurrencia» 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 3 lecciones en total.
¿Qué aprenderé en «Errores habituales de concurrencia»?
Identifique errores habituales de concurrencia: condiciones de carrera, interbloqueos y problemas de visibilidad. 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 3 de 3.
¿Cuánto tiempo toma la lección «Errores habituales de concurrencia»?
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
- Sincronización y bloqueos
- Variables atómicas y colecciones concurrentes
- Errores habituales de concurrencia