É possível interromper um segmento específico de um ExecutorService?
Se eu tiver umExecutorService
para o qual eu alimento tarefas Runnable, posso selecionar uma e interrompê-la?
Eu sei que posso cancelar o futuro retornado (também mencionadoAqui: how-to-interrupt-executors-thread), mas como posso levantar umInterruptedException
. Cancel não parece fazê-lo (embora o evento deva observar as fontes, talvez a implementação do OSX seja diferente). Pelo menos esse trecho não imprime "isso!" Talvez eu esteja entendendo mal alguma coisa e não é o costume que consegue a exceção?
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();
}
}