Czy jest możliwe przerwanie określonego wątku usługi ExecutorService?

Jeśli mamExecutorService do którego karmię zadania Runnable, czy mogę je wybrać i przerwać?
Wiem, że mogę anulować zwróconą przyszłość (również wspomnianąTutaj: how-to-interrupt-executors-thread), ale jak mogę podnieśćInterruptedException. Anulowanie wydaje się tego nie robić (zdarzenie, choć powinno się to odbywać na podstawie źródeł, być może implementacja OSX jest inna). Przynajmniej ten fragment nie drukuje „to!” Może coś źle rozumiem i nie jest to niestandardowy runnable, który dostaje wyjątek?

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

}

questionAnswers(1)

yourAnswerToTheQuestion