Przyszłe zadanie ExecutorService nie zostanie anulowane

Przesuwam moje Futures z ExecutorService do mapy mieszania. Później mogę anulować połączenie na Futures z mapy mieszania. Chociaż wynik jest prawdziwy, później trafiłem na punkty przerwania w procedurze Callable, tak jakby Przyszłe anulowanie () nie przyniosło efektu. Myślę, że może to być przypadek dwóch różnych odwołań tutaj (nawet jeśli identyfikatory referencyjne są wymienione jako takie same przy łamaniu), ale zastanawiał się, czy niektórzy eksperci mogą wtrącić się. Oto jak wygląda kod:

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);

Zezwalam na kontynuowanie przetwarzania (jest to pętla, która przesyła zadania w miarę ich przekazywania), a później mogę próbować anulować z zewnętrznego źródła, wywołując tę ​​metodę:

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;     
}

Wciąż jednak napotykam „nie anulowaną” ścieżkę w MyProcessor.call () po wywołaniu metody future.cancel () - tzn. Nie jest ona faktycznie anulowana.

Gdzie się z tym mylę? Czy jest lepiej to zrobić?

questionAnswers(2)

yourAnswerToTheQuestion