Repaso
English
Java CoreIntermedioJV-27

¿Por qué usar un ExecutorService (thread pool) en lugar de new Thread() para cada tarea?

Opciones

  1. Los threads no se pueden crear con la palabra clave new
  2. Los threads son costosos; un pool reutiliza unos pocos y encola el resto (Opción correcta)
  3. Los executors hacen que el código se ejecute en la GPU en vez de la CPU
  4. Un pool garantiza que las tareas nunca fallen ni lancen excepciones

Respuesta

Crear threads es costoso y los threads sin límite pueden agotar la memoria; un pool reutiliza un número fijo de threads y encola las tareas extra

Por qué

Cada thread usa memoria (cerca de 1 MB de stack) y el sistema operativo tarda en crearlo. Si un servidor creara un thread por petición, un pico de tráfico podría crear miles y provocar una caída.

Un ExecutorService mantiene un conjunto limitado de worker threads que toman tareas de una cola y se reutilizan. Envías tareas y obtienes un Future con el resultado. Ciérralo siempre (shutdown()) al terminar.

ExecutorService pool = Executors.newFixedThreadPool(4);
Future<Integer> f = pool.submit(() -> 21 * 2);
System.out.println(f.get());   // 42
pool.shutdown();

Recuerda

Thread pool = reutilizar un conjunto limitado de threads.

Términos clave

Practica esta pregunta en Repaso