Недавно я работал с ThreadPoolExecutor и priorityqueue и наткнулся на оба метода future.cancel() на будущую задачу. И task.remove() на задачу, которую он сам, чтобы удалить из очереди.Отменить() vs remove() на исполнителей
Каков наилучший вариант? есть ли разница? Я могу сохранить список как (будущий объект, полученный от представить() или сами задачи), не уверен, что использовать ...
удалить:
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
false В отмене это потому, что я хочу только удалить задачу очереди, если она запустится, пусть она закончит.
Я использую PriorityQueue поэтому я сохранить ComparableFutureTask, как это наводит на мысль: http://stackoverflow.com/questions/30574777/implementing-priorityqueue-on-threadpoolexecutor Я переопределение выполнить, чтобы вернуться, что ComparabaleFutureTask и сохранить все ссылки и на этом объекте i заготовку cancel(). и по какой-то причине он не работает ... Я предполагаю, что вам нужно открывать новый вопрос, характерный для этого события, но предполагается ли, что он работает на сопоставимомFutureTask? Любой –
@sharongur Что вы подразумеваете под; «это не работает» и что вы ожидали? –
Отменяю задачу и вставляю новую с более высоким приоритетом, но порядок выполнения остается неизменным. и никакая новая задача не вставлена –