¿Cuál es la mejor forma de manejar RejectedExecutionException
mientras usa ThreadPoolExecutor
en Java?Cómo manejar RejectedExecutionException con ThreadPoolExecutor en java
que quieren asegurarse de que la tarea presentada no debe ser pasado por alto y debe sin duda se ejecutan. A partir de ahora no hay requisitos duros en tiempo real para realizar la tarea.
Una de las cosas que pensé que se podía hacer era esperar en un bucle hasta que sepa que no hay espacio en la cola ejecutable, y luego seguir y añadirlo a la cola.
sería feliz si la gente puede compartir sus experiencias.
Adición de la posible solución que a pesar de:
while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));
Esto creará una condición de carrera si hay más de un hilo tratando de hacer esto. También quemará una CPU que podría significar que el ejecutor tardará más en borrar la cola. p.ej. si solo hay una CPU para el sumador y el ejecutor, esto podría ser desastroso. –
Desde la arquitectura solo habría un hilo haciendo esto, y para manejar el tiempo de CPU consumido, haré que el hilo duerma. ¿Cómo se ve esto ahora? – Neeraj
Dormir, incluso por un corto tiempo (incluso 1 - 10 ms) es mucho mejor que no hacerlo. 100 ms es un buen valor también. Esto está bien si solo tiene un hilo de publicación. –