Nella programmazione distribuita, in particolar modo per quanto riguarda la programmazione di web server, non è insolito ricorrere ai
thread pool, che consentono di poter gestire molteplici richieste HTTP provenienti da più client contemporaneamente.
Pertanto, considerando il trattamento di una singola richiesta HTTP un task da eseguire, un thread pool, composto da
n thread già istanziati, che implementano tale task, è in grado di eseguire
n richieste in parallelo, fermo restando la possibilità di poter estendere il pool con nuovi thread, nei casi di picco di richieste contemporanee.
Anche Java fornisce, a partire dalla versione 1.5 e affinata nella successiva 1.6, una soluzione per una corretta gestione dei thread pool, che è contenuta all'interno della classe
java.util.concurrent.Executors, in cui sono presenti alcune factory che consentono di creare diverse
tipologie di thread pool che in Java utilizzano la classe
ExecutorService. In particolare ci occuperemo del thread pool creato utilizzando la factory definita nel metodo
newCachedThreadPool(n), dove
n è il numero di thread minimo che si desidera avere nel pool.
La principale caratteristica di un oggetto che implementa l'interfaccia
ExecutorService, creato con il metodo
newCachedThreadPool, è quella di implementare un thread pool che riutilizza i thread ad esso sottomessi, creandone dei nuovi quando è necessario, e questo è esattamente il thread pool utilizzato dai web server come
Apache.