java-FutureTask保持活动状态

这是一个非常简单的代码:

FutureTask<Integer> task = new FutureTask<>(new
            Callable<Integer>(){
                @Override
                public Integer call() throws Exception {
                    int i =0;
                    while(i<10){
                        i++;
                    }

                    return 0;
                }

    });

数到10然后退出…容易.

我这样执行它:

    Executor executor = Executors.newCachedThreadPool();
    executor.execute(task);
    try {
        task.get(3000, TimeUnit.MILLISECONDS);
        System.out.println("Everything was ok");
    } catch (InterruptedException | ExecutionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (TimeoutException ex){
        boolean result = task.cancel(true); 
        System.out.println("the task has timed out "+result);
    }

我在控制台中“一切正常”,因此任务正确执行并返回.
但是线程仍然存在!我可以通过将其执行到蚀来看到它:标记为正在执行程序的红色正方形仍处于活动状态.
但是在打印“一切都很好”之后,我的主电源关闭了,因此必须完成该任务.
为什么它不关闭?我该如何关闭?

我看到了一些具有关闭方法的ExecutorService类示例,但是我不想关闭整个线程池,因为我仍然需要激活它才能接受其他任务,我只想关闭该任务!

解决方法:

Executors.newCachedThreadPool()的文档指出,它“创建一个线程池,该线程池可根据需要创建新线程,但将在可用的情况下重用以前构造的线程……未使用六十秒的线程将被终止并从中删除.缓存.”

你等了六十秒吗?

上一篇:java – 从线程创建其他线程的最有效方法是什么?


下一篇:java – 并发:如何使用传入和传出队列实现执行程序?