Ho un programma java che ascolta su una porta per l'input. Basato su Input, chiama un webservice e quindi restituisce un successo / fallimento al programma client.
I fork di un thread per ogni connessione client. La risposta al client che si connette al programma deve essere veloce.
Queste sono le scelte che sto considerando
- usa i thread regolari
- usa
ExecutorService
connewFixedThreadPool
- usa
ExecutorService
connewCachedThreadPool
La ragione per cui sto considerando Pools è perché i miei thread sono di breve durata - chiamano semplicemente un webservice, restituiscono il risultato al client e chiudono la connessione.
Non penso che newFixedThreadPool
sarebbe la cosa giusta perché le connessioni sarebbero in attesa nelle code per ottenere un thread.
newCachedThreadPool
sarebbe stato perfetto tranne per una cosa: i thread muoiono dopo un minuto. Nel mio caso, ricevo esplosioni di connessioni - cioè connessioni multiple e poi ci può essere una pausa per alcuni minuti e poi scoppia di nuovo. Penso che i thread nel CachedThreadPool sarebbero morti e avrebbero dovuto essere ricreati di nuovo - quindi in questo caso, potrebbe funzionare come # 1 a volte.
Idealmente mi sarebbe piaciuto avere newCachedThreadPool
con un minimo - cioè un'impostazione che dice che il numero di thread non andrebbe mai al di sotto di dire 20. Quindi i thread inattivi vengono uccisi ma non consentono mai di scendere sotto una soglia minima.
È disponibile qualcosa di simile? O ci sono alternative migliori?