Можно ли прервать конкретный поток в ExecutorService?
Если у меня естьExecutorService
для чего я передаю Runnable задачи, могу ли я выбрать одну и прервать ее?
Я знаю, что могу отменить возвращенное будущее (также упомянутоЗдесь: как-прервать-исполнителей-поток), но как я могу поднятьInterruptedException
, Кажется, что Cancel не делает этого (хотя, смотря на источники, это может произойти, может быть, реализация OSX отличается). По меньшей мере, этот фрагмент не «печатает» это! » Может быть, я что-то неправильно понимаю, и это не пользовательский исполняемый файл, который получает исключение?
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();
}
}