首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FutureTask保持活动状态

FutureTask保持活动状态
EN

Stack Overflow用户
提问于 2014-02-27 18:30:17
回答 1查看 128关注 0票数 3

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

代码语言:javascript
复制
FutureTask<Integer> task = new FutureTask<>(new
            Callable<Integer>(){
                @Override
                public Integer call() throws Exception {
                    int i =0;
                    while(i<10){
                        i++;
                    }

                    return 0;
                }

    });

数到10,然后算exits...easy。

我就这样执行:

代码语言:javascript
复制
    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);
    }

我将“一切正常”放入控制台,因此任务正确执行并返回。然而,线仍然存在!我可以通过将它执行到eclipse中来看到它:标记正在执行的程序的红色方块仍然处于活动状态。但我的主关闭后打印“一切都好”,所以它一定是那个任务。为什么它不关闭?我怎么才能把它关起来?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-27 18:39:09

Executors.newCachedThreadPool()的文档指出,它“创建一个线程池,根据需要创建新线程,但在可用时将重用以前构建的线程……没有使用60秒的线程将被终止并从缓存中删除”。

你等了六十秒钟了吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22077258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档