Kann ein bestimmter Thread eines ExecutorService unterbrochen werden?

Wenn ich eine habeExecutorService Kann ich einen auswählen und ihn unterbrechen, für den ich Runnable-Tasks füttere?
Ich weiß, dass ich den zurückgegebenen Future stornieren kann (auch erwähnt)Hier: How-to-Interrupt-Executors-Thread), aber wie kann ich eineInterruptedException. Cancel scheint dies nicht zu tun (obwohl dies aufgrund der Quellen der Fall sein sollte, unterscheidet sich möglicherweise die OSX-Implementierung). Zumindest druckt dieses Snippet nicht "es"! Vielleicht missverstehe ich etwas und es ist nicht der Brauch, der die Ausnahme macht?

public class ITTest {
static class Sth {
    public void useless() throws InterruptedException {
            Thread.sleep(3000);
    }
}

static class Runner implements Runnable {
    Sth f;
    public Runner(Sth f) {
        super();
        this.f = f;
    }
    @Override
    public void run() {
        try {
            f.useless();
        } catch (InterruptedException e) {
            System.out.println("it!");
        }
    }
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService es = Executors.newCachedThreadPool();
    Sth f = new Sth();
    Future<?> lo = es.submit(new Runner(f));
    lo.cancel(true); 
    es.shutdown();
}

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage