知道未来是不是已经开始
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) 将失败,即使它没有启动。我想知道线程运行了多长时间。编辑:文斯解释得比我好:)以上是关于知道未来是不是已经开始的主要内容,如果未能解决你的问题,请参考以下文章