gpt4 book ai didi

java - FutureTask 保持活跃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:05 24 4
gpt4 key购买 nike

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

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

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

我看到一些带有关闭方法的 ExecutorService 类的示例,但我不想关闭整个线程池,因为我仍然需要它处于 Activity 状态才能接受其他任务,我只想关闭该任务!

最佳答案

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

你等了六十秒了吗?

关于java - FutureTask 保持活跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com