Будущая задача ExecutorService не отменяется по-настоящему

Я помещаю свои фьючерсы из ExecutorService в хэш-карту. Позже я могу вызвать отмену фьючерсов из хэш-карты. Хотя результат верен, я позже нажмите точки останова в процедуре Callable, как если бы Future cancel() не имел никакого эффекта.Я думаю, что здесь может быть случай двух разных ссылок (даже несмотря на то, что идентификаторы ссылок указаны как одинаковые при установке точки останова), но мне было интересно, если могут вмешаться некоторые эксперты. Вот как выглядит код:

ExecutorService taskExecutor = Executors.newCachedThreadPool();
Map <String, Future<Object>> results = new HashMap <String, Future<Object>>();      

Future<Object> future = taskExecutor.submit(new MyProcessor(uid));
results.put(uid, future);

Я разрешаю продолжить обработку (это все oop, который отправляет задачи по мере их поступления), и позже я могу попытаться отменить из внешнего источника, вызвав этот метод:

public static synchronized boolean cancelThread(String uid) {
    Future<Object> future = results.get(uid);
    boolean success = false;
    if (future != null) {
        success = (future.isDone() ? true : future.cancel(true));
        if (success)
            results.remove(uid);
    }
    return success;     
}

Но я все еще сталкиваюсь с «неотмененным» путем в MyProcessor.call() после future. вызывается функция cancel(), т.е. на самом деле она не отменяется.

В чем я ошибаюсь? Можно ли было это сделать лучше?

11
задан Gray 6 May 2017 в 13:21
поделиться