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
risposta
È 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.
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
Perché non creare il proprio ExecutorService
che presenta questo comportamento?
Dai un'occhiata al metodo getQueue(). Sono abbastanza sicuro che la pulizia funzionerebbe (non testata comunque).
GetQueue() può solo pulire le attività in coda. Non posso fare nulla con le attività già in esecuzione .. – rgomesf
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.
Ho già provato a ri-implementare shutdownNow() ma alcune variabili sono private e senza di esse non posso fare quello che voglio ... – rgomesf
L'opzione esiste per arrestare l'ExecutorService corrente e sostituirlo con uno nuovo? – tylermac