Por lo que sé, tanto la lista como la matriz pueden crecer sin límites o ¿estoy equivocado? Pero cuando he pasado por el documentation in the Executor Service Veo esto:¿Por qué ArrayBlockingQueue se llama una cola limitada mientras que LinkedBlockingQueue se llama cola de bloqueo ilimitada?
Colas ilimitadas. El uso de una cola ilimitada (por ejemplo, LinkedBlockingQueue sin una capacidad predefinida) provocará que nuevas tareas esperen en la cola cuando todos los hilos de la base de datos están ocupados. Por lo tanto, nunca más se crearán subprocesos corePoolSize. (Y el valor de la maximumPoolSize por lo tanto no tiene ningún efecto.)
lo mismo ocurre con los cambios en las propiedades Unbounded Queue
cuando el LinkedBlockingQueue
tiene una capacidad definida?
Y este escrito para ArrayBlockingQueue
:
colas acotada. Una cola acotada (por ejemplo, un ArrayBlockingQueue) ayuda a evitar el agotamiento de recursos cuando se utiliza con el valor máximo de PoolSizes, pero puede ser más difícil de ajustar y controlar. Los tamaños y tamaños de agrupación máximos de Queue pueden intercambiarse entre sí: el uso de grandes colas y grupos pequeños minimiza el uso de CPU, los recursos del sistema operativo y carga de cambio de contexto, pero puede generar un rendimiento artificialmente bajo. Si las tareas se bloquean con frecuencia (por ejemplo, si están vinculadas con la E/S ), un sistema puede programar el horario para más hilos que que de otro modo permitiría. El uso de colas pequeñas generalmente requiere tamaños de grupo de más grandes, lo que mantiene las CPU ocupadas pero puede encontrar una sobrecarga de programación inaceptable, que también disminuye el rendimiento.
@Andrej Sí, estoy confundiendo ArrayList for Array. gracias por la aclaración. Por cierto, ¿cómo crece ArrayList cuando está respaldado por una matriz subyacente que no puede crecer? – Geek
Cuando se necesita cambiar el tamaño, 'ArrayList' asigna una nueva matriz más grande y copia todos los elementos a esa nueva matriz. –