ExecutorService
Runnable タスクをフィードする がある場合、1 つを選択して中断できますか?
返された Future をキャンセルできることはわかっています (ここにも記載されています: how-to-interrupt-executors-thread ) InterruptedException
。キャンセルはそれを行うようには見えません (ソースを見ることでイベントが発生するはずですが、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();
}
}