Estoy tratando de ejecutar muchas tareas usando un ThreadPoolExecutor. A continuación se muestra un ejemplo hipotético:Bloque ThreadPoolExecutor cuando la cola está llena?
def workQueue = new ArrayBlockingQueue<Runnable>(3, false)
def threadPoolExecutor = new ThreadPoolExecutor(3, 3, 1L, TimeUnit.HOURS, workQueue)
for(int i = 0; i < 100000; i++)
threadPoolExecutor.execute(runnable)
El problema es que rápidamente consigo un java.util.concurrent.RejectedExecutionException ya que el número de tareas supera el tamaño de la cola de trabajo. Sin embargo, el comportamiento deseado que estoy buscando es tener el bloque de hilos principal hasta que haya espacio en la cola. Cuál es la mejor manera de lograr esto?
Eche un vistazo a esta pregunta: http://stackoverflow.com/questions/2001086/how-to-make-threadpoolexecutors-submit-method-block-if-it-is-saturated – Kiril
[Esta respuesta] (http : //stackoverflow.com/a/4522411/394431) a otra pregunta sugiere usar una subclase 'BlockingQueue' personalizada que bloquea en' offer() 'delegando en' put() '. Creo que termina trabajando más o menos igual que el 'RejectedExecutionHandler' que llama a' getQueue(). Put() '. –
Poner directamente en cola sería incorrecto, como se explica en esta respuesta http://stackoverflow.com/a/3518588/585903 –