¿Por qué usar un ExecutorService (thread pool) en lugar de new Thread() para cada tarea?
Opciones
- Los threads no se pueden crear con la palabra clave
new - Los threads son costosos; un pool reutiliza unos pocos y encola el resto (Opción correcta)
- Los executors hacen que el código se ejecute en la GPU en vez de la CPU
- 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.