JAVA - отменить выполнение ThreadPoolExecutor задач - PullRequest
5 голосов
/ 13 мая 2010

Мне нужен метод, аналогичный shutdownNow, но после этого я могу отправлять новые задачи. Мой ThreadPoolExecutor будет принимать произвольное количество задач во время выполнения моей программы.

Ответы [ 4 ]

9 голосов
/ 13 мая 2010

Вы можете захватить Future каждой отправки, сохранить это Future в коллекции, а затем, когда вы хотите отменить задачи, вызвать future.cancel () всех задач, поставленных в очередь.

С этим решением Exectuor все еще работает, и любые запущенные задачи отменяются или не будут выполняться, если они поставлены в очередь.

0 голосов
/ 13 мая 2010

Посмотрите на метод getQueue () . Я почти уверен, что очистка будет работать (однако не проверено).

0 голосов
/ 13 мая 2010

Разве недостаточно просто сделать getQueue () и очистить его? Если вам действительно нужно попытаться остановить выполнение задач, вам потребуется создать подкласс ThreadPoolExecutor и, по существу, повторно реализовать shutdownNow (), но только скопировать бит, который отправляет прерывание в каждый поток. Имейте в виду, это все еще не является гарантией того, что вы фактически заставите их немедленно прекратить и не делать никаких дальнейших расчетов. Вам понадобится совершенно другой подход, если вам нужно это сделать.

0 голосов
/ 13 мая 2010

Почему бы не создать свой собственный ExecutorService, который демонстрирует такое поведение?

...