Zukünftige Aufgabe von ExecutorService wird nicht wirklich abgebrochen

Ich schiebe meine Futures von einem ExecutorService in eine Hash-Map. Später kann ich Cancel on Futures aus der Hash-Map aufrufen. Obwohl das Ergebnis wahr ist, habe ich später Breakpoints innerhalb der Callable-Prozedur erreicht, als ob Future cancel () keine Wirkung hätte. Ich denke, es könnte sich um zwei verschiedene Referenzen handeln (obwohl die Referenz-IDs beim Breakpointing als gleich aufgeführt sind), aber ich habe mich gefragt, ob sich einige Experten einschalten könnten. Der Code sieht folgendermaßen aus:

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

Ich erlaube, dass die Verarbeitung fortgesetzt wird (es ist eine Schleife, die Aufgaben sendet, wenn sie übergeben werden), und später kann ich versuchen, von einer externen Quelle aus abzubrechen, indem ich diese Methode aufrufe:

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

Nach dem Aufrufen von future.cancel () wird in MyProcessor.call () immer noch ein "nicht abgebrochener" Pfad angezeigt, d. H., Er wird nicht wirklich abgebrochen.

Wo gehe ich damit falsch? Gibt es eine bessere Möglichkeit, dies zu tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage