2010-05-13 12 views
5

Lo que necesito es un método similar a shutdownNow, pero, después de eso, puede enviar nuevas tareas. My ThreadPoolExecutor aceptará un número aleatorio de tareas durante la ejecución de mi programa.JAVA - Cancele las tareas que ejecutan ThreadPoolExecutor

+1

¿Existiría la opción de cerrar el ExecutorService actual y reemplazarlo por uno nuevo? – tylermac

Respuesta

8

Puede obtener el futuro de cada presentación, almacenar ese futuro en una colección, luego, cuando desee cancelar las tareas, invocar future.cancel() de todas las tareas en cola.

Con esta solución, el Exectuor aún se está ejecutando y las tareas en ejecución se cancelan o no se ejecutarán si están en cola.

+0

Gracias, mi única pregunta con respecto a sus soluciones fueron aproximadamente del tamaño de la colección porque mi ThreadPoolExecutor recibirá tareas ilimitadas. Pero con un mapa y sobrescribir submit y afterExecute puedo mantener mi colección solo con las tareas en ejecución. – rgomesf

0

¿Por qué no crear su propio ExecutorService que exhiba este comportamiento?

0

Echa un vistazo al método getQueue(). Estoy bastante seguro de que el borrado funcionaría (sin embargo, no probado).

+1

GetQueue() solo puede limpiar las tareas en la cola. No se puede hacer nada con las tareas que ya se están ejecutando. – rgomesf

-1

¿No es suficiente hacer getQueue() y borrarlo? Si realmente necesita intentar detener la ejecución de tareas, necesitaría subclasificar el ThreadPoolExecutor y esencialmente volver a implementar shutdownNow() pero solo copiar el bit que envía una interrupción a cada subproceso. Tenga en cuenta que esto todavía no es ninguna garantía de que realmente hará que cese inmediatamente y no haga ningún cálculo adicional. Necesitará un enfoque totalmente diferente si necesita hacer eso.

+0

Ya traté de volver a implementar shutdownNow() pero algunas variables son privadas, y sin ellas no puedo hacer lo que quiero ... – rgomesf

Cuestiones relacionadas