2012-06-25 10 views
13

estoy usando Executors.newScheduledThreadPool() para crear un ScheduledExecutorService, especificando el número de hilos de este modo:¿Un ScheduledExecutorService creará nuevos subprocesos según sea necesario?

int corePoolSize = 42; 
ScheduledExecutorService foo = Executors.newScheduledThreadPool(corePoolSize); 

De acuerdo con los JavaDocs, el argumento corePoolSize establece

el número de hilos para mantener en el grupo, incluso si están inactivos.

¿Quiere esto decir que este ExecutorService aplicación puede crear más de corePoolSize roscas según sea necesario, de forma similar a un cached thread pool?

+1

Core tamaño de la piscina: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html – assylias

+0

relacionadas: http://stackoverflow.com/ questions/42495659/how-to-create-a-scheduledexecutorservice-bound-by-only-the-cpu-usage –

Respuesta

7

No. La respuesta correcta es no, un ScheduledExecutorService no generará nuevos subprocesos.

See answer here

+0

Bien investigado. Estoy de acuerdo con su opinión (en su publicación eliminada) de que esto es algo molesto. –

+1

@Michael - Explique por qué piensa eso. –

+0

El motivo principal es la siguiente frase de la [documentación] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html): "Si bien esta clase hereda de ThreadPoolExecutor, algunos de los métodos de ajuste heredados no son útiles. En particular, debido a que actúa como un grupo de tamaño fijo que usa subprocesos corePoolSize y una cola ilimitada, los ajustes en maximumPoolSize no tienen ningún efecto útil ". –

6

¿Quiere decir esto que esta implementación ExecutorService puede crear más de corePoolSize roscas según sea necesario?

Sí, eso es exactamente lo que significa. El motivo de la existencia de corePoolSize es el gasto de creación de subprocesos. Si espera disparar un gran número de tareas efímeras en su servicio de ejecutor, es posible que encuentre, en un momento dado, un gran número de hilos ociosos.

En lugar de que estos hilos se mueran, solo para ser reemplazados poco tiempo después por los hilos recién creados, corePoolSize asegurará que siempre habrá una cantidad de hilos que giran.

+0

¡La documentación! Confías en la documentación o no :-) –

+0

Bueno, parece que esto no es cierto. Necesito mirar la documentación para 'ScheduledExecutorService', no solo' ThreadPoolExecutor''s 'corePoolSize' concept. Ahora me pregunto por qué no se llama 'minimumPoolSize' ... –

Cuestiones relacionadas