小编teg*_*lus的帖子

future.cancel不起作用

我有一个漂亮而紧凑的代码,它不能像我预期的那样工作.

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");

    }

}
Run Code Online (Sandbox Code Playgroud)

输出是:

超时是真的

结束

问题:为什么不终止future.cancel(true)方法调用Runnable?程序将"END"写入输出后,"r"Runnable仍在运行.

java java.util.concurrent

7
推荐指数
1
解决办法
5041
查看次数

标签 统计

java ×1

java.util.concurrent ×1