2010-05-13 11 views
5

Quello che mi serve è un metodo simile a shutdownNow, ma, dopo averlo inviato, è possibile inviare nuove attività. My ThreadPoolExecutor accetterà un numero casuale di attività durante l'esecuzione del mio programma.JAVA - Annulla le attività eseguibili di ThreadPoolExecutor

+1

L'opzione esiste per arrestare l'ExecutorService corrente e sostituirlo con uno nuovo? – tylermac

risposta

8

È possibile afferrare il Futuro di ciascuna submission, archiviare Future in una raccolta, quindi quando si desidera annullare le attività, richiamare future.cancel() di tutte le attività in coda.

Con questa soluzione, Exectuor è ancora in esecuzione e tutte le attività in esecuzione vengono annullate o non verranno eseguite se sono in coda.

+0

Grazie, la mia unica domanda riguardo le tue soluzioni riguardavano la dimensione della collezione perché il mio ThreadPoolExecutor riceverà attività illimitate. Ma con una mappa e sovrascrittura submit e afterExecute posso mantenere la mia collezione solo con le attività in esecuzione. – rgomesf

0

Perché non creare il proprio ExecutorService che presenta questo comportamento?

0

Dai un'occhiata al metodo getQueue(). Sono abbastanza sicuro che la pulizia funzionerebbe (non testata comunque).

+1

GetQueue() può solo pulire le attività in coda. Non posso fare nulla con le attività già in esecuzione .. – rgomesf

-1

Non è sufficiente fare solo getQueue() e cancellarlo? Se è davvero necessario tentare di interrompere l'esecuzione delle attività, è necessario creare una sottoclasse di ThreadPoolExecutor ed essenzialmente implementare nuovamente shutdownNow(), ma copiare solo il bit che invia un interrupt a ciascun thread. Intendiamoci, tuttavia, non è ancora garantito che in effetti si arresteranno immediatamente e non si effettueranno ulteriori calcoli. Avrai bisogno di un approccio completamente diverso se hai bisogno di farlo.

+0

Ho già provato a ri-implementare shutdownNow() ma alcune variabili sono private e senza di esse non posso fare quello che voglio ... – rgomesf

Problemi correlati