【发布时间】:2012-11-06 19:43:31
【问题描述】:
我使用 ExecutorService 来安排将来要执行的任务。在看到一些“奇怪”的行为之后,我的 Callable 在我通过将 Callable 提交到 ExecutorService 池返回的 Future 对象上调用 get() 之前被执行,我阅读了一些文档,发现提交的任务将在它之间执行被提交或最迟在 Future 对象上调用 get() 时提交。
我的问题 - 是否有任何类允许将 Callables 提交给它并且仅在调用 get() 时才执行?在这一点上,似乎只是自己管理 Callables 并在我准备好执行 Callables 时自己对它们调用 call() 似乎可以完成我想要的,但我想确保已经没有服务实现了这一点。
简而言之,是否有任何替代 ExecutorService 可以让我控制何时调用提交给它的 Callables?注意 - 我希望调用它们的未来时间是可变的,并且未确定,因为我可能决定不调用它们,因此 ScheduledExecutorService 池不会在这里工作。
非常感谢!
【问题讨论】:
-
这与同步调用
call()有何不同?线程有什么好处? -
不一定。我只是要求确保没有已经处理此问题的服务。鉴于下面的答案,我怀疑我应该手动执行此操作(正如您也建议的那样)是要走的路!
-
请注意,Future.get() 是一个同步调用,它会阻塞调用线程执行并使其等待可调用对象完成,因此牺牲了可调用对象的好处(应该是异步运行的),除非您有非常特殊的要求,否则不要在代码中使用和依赖它。自动管理的任务执行是 ExecutorService 的一个特性,如果这不符合你的需求,干脆不要使用它,并在你需要的时候直接在你的代码中使用 callable.call()/runnable.run()。跨度>
标签: java android executorservice callable