Tarea futura de ExecutorService no cancelando realmente

Empujo mis futuros de un servicio de ejecución en un mapa hash. Más tarde, puedo llamar a cancelar en futuros desde el mapa hash. Aunque el resultado es verdadero, más tarde llegué a puntos de interrupción dentro del procedimiento invocable, como si el futuro cancel () no tuviera efecto. Creo que podría ser el caso de dos referencias diferentes aquí (aunque los identificadores de referencia se enumeran como iguales al punto de interrupción), pero se preguntaba si algunos expertos podrían intervenir. Así es como se ve el código:

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

Permito que el procesamiento continúe (es un bucle que envía tareas a medida que se pasan), y luego puedo intentar cancelar desde una fuente externa llamando a este método:

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

Pero todavía encuentro una ruta "no cancelada" dentro de MyProcessor.call () después de que se llame a future.cancel (), es decir, en realidad no se está cancelando.

¿A dónde me voy mal con esto? ¿Hay algo mejor para hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta