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