2014-09-06 24 views
5

Nella nostra applicazione, abbiamo un sacco di ThreadPoolExecutor s. Quando l'applicazione è inattiva, anche gli ThreadPoolExecutor s sono inattivi, ma il numero di thread inattivi nell'applicazione è molto alto.È buona norma impostare allowCoreThreadTimeOut() in ThreadPoolExecutor?

Nel dump del thread, ho scoperto che la maggior parte dei thread appartiene ai ThreadPoolExecutor s in attesa di attività. Ci sono effetti collaterali nel mantenere in vita questi thread di lavoro? Devo usare setAllowCoreThreadTimeOut() in ThreadPoolExecutor in modo che i thread di lavoro muoiano dopo essere rimasti inattivi per un po '?

risposta

3

Ogni thread ha uno stack associato che richiede una certa quantità di memoria (configurabile). Se i tuoi thread sono in attesa (e anche se non lo sono), stanno riservando quella memoria. Non può essere usato dal resto della tua applicazione. Pertanto, potrebbe aver senso interrompere questi thread (con setAllowCoreThreadTimeout()), rilasciare la memoria che avevano prenotato e lasciare che lo ThreadPoolExecutor li ricreasse come necessario.

Problemi correlati