Недавно я работал с ThreadPoolExecutor и priorityqueue и столкнулся с обоими методами future.cancel() для будущей задачи. И task.remove() для самой задачи, чтобы удалить ее из очереди.
Какой вариант лучше? есть ли разница? Я могу сохранить список обоих (будущий объект, полученный от submit(), или сами задачи), не знаю, что использовать...
удалять:
executor.remove(task);
executor.purge();
Отмена:
futureObject.cancel(false);
Я использовал следующее: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html#remove%28java.lang.Runnable%29
Ложь в отмене заключается в том, что я хочу удалить только задачу очереди, если она выполняется, пусть она завершится.