未来取消不起作用
2022-09-03 13:54:17
我有一个漂亮而紧凑的代码,它没有像我预期的那样工作。
public class Test {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
for (;;) {
}
} finally {
System.out.println("FINALLY");
}
}
};
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(r);
try {
future.get(3, TimeUnit.SECONDS);
} catch (TimeoutException e) {
boolean c = future.cancel(true);
System.out.println("Timeout " + c);
} catch (InterruptedException | ExecutionException e) {
System.out.println("interrupted");
}
System.out.println("END");
}
}
输出为:
超时为真
结束
问:为什么不终止 future.cancel(true) 方法,即名为 Runnable 的方法?程序将“END”写入输出后,“r”Runnable仍在运行。