知道未来是不是已经开始

Posted

技术标签:

【中文标题】知道未来是不是已经开始【英文标题】:Know if a future is started知道未来是否已经开始 【发布时间】:2016-07-29 22:24:40 【问题描述】:

我正在使用 openejb 和异步 EJB。我有很多期货,想知道期货上的一个是否需要太多时间(所以我可以追踪它并最终取消它)。问题是要知道未来 si 运行多长时间,我需要知道它什么时候开始。 Future 接口让我知道 Future 是完成还是取消,但如果不是,我不知道它是在运行还是在等待池中的线程。 是否可以获得 Future 状态(正在运行/未开始)?

谢谢

【问题讨论】:

似乎Future 不允许这样做。您始终可以让任务将自身添加到集合中,然后检查集合以查看正在运行的任务。 是的,但我想要一个通用的解决方案 似乎这种类似标志的系统是轻松实现此行为的唯一方法。您的下一个选择是扩展Future 接口以将标志添加到每个未来。但这将要求您与当前正在使用的任何执行程序混在一起,以便让执行程序向您传递一个包含标志的 Future 实现的实例 您能否显示创建任务和使用Future 对象的代码?我会尝试写一个适合您需求的答案 【参考方案1】:

我相信你的意图是 1) 使用 Future 从提交的任务中获取返回值 2)如果时间太长,取消它。

如果这是正确的 - 那么为什么不使用 get 指定超时值。

【讨论】:

因为Future 可能正在等待池中的线程被释放。如果您在 5 秒后超时,仍然无法确定该任务是否正在进行中且耗时过长,或者该任务是否仍在等待线程 超时不是我想要的。如果未来没有在超时内终止,get(timeout) 将失败,即使它没有启动。我想知道线程运行了多长时间。编辑:文斯解释得比我好:)

以上是关于知道未来是不是已经开始的主要内容,如果未能解决你的问题,请参考以下文章

未来已来:云原生时代云计算如何一步步走来?

2018年即将到来,大牛们已经开始关注的那些新的语言框架和工具

开始大数据分析之前需要做好什么工作?

《结对-结对编程项目作业-结对项目总结》

迷茫的未来,我们需要做些什么来面对呢?

从零开始配置 vim——键盘映射的一些技巧