Ejecutor de subprocesos - límite de tamaño de la cola y quitar de la cola más antigua

user6903701:

Estoy utilizando un grupo de subprocesos fijo para un consumidor de mensajes producidos dentro de una aplicación de inicio de la primavera. Mi productor está produciendo (mucho) más rápido que el productor es capaz de manejar un mensaje, por lo tanto, la cola del grupo de subprocesos parece ser "inundación".

¿Cuál sería la mejor manera de limitar el tamaño de la cola? El comportamiento de colas previsto sería "si la cola está llena, quitar la cabeza e inserte el nuevo Ejecutable". ¿Es posible configurar el conjunto de hilo ejecutores de esta manera?

Xingbin:

ThreadPoolExecutorsoporta esta función a través de ThreadPoolExecutor.DiscardOldestPolicy:

Un manejador de tareas rechazadas que descarta la solicitud no controlada más antiguo y vuelve a intentar ejecutar, a no ser que el ejecutor está cerrado, en cuyo caso se descarta la tarea.

Es necesario para construir la piscina con esta política mannully, por exmaple:

int poolSize = ...;
int queueSize = ...;
RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();

ExecutorService executorService = new ThreadPoolExecutor(poolSize, poolSize,
    0L, TimeUnit.MILLISECONDS,
    new LinkedBlockingQueue<>(queueSize),
    handler);

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=188343&siteId=1
Recomendado
Clasificación