我对 future
的使用有一些疑问。在解决我的疑问之前,请先阅读下面的示例。
http://javarevisited.blogspot.in/2015/01/how-to-use-future-and-futuretask-in-Java.html
- 使用线程池和
Executors
的主要目的是异步执行任务而不阻塞主线程。但是一旦你使用Future,它就会阻塞调用线程。我们是否必须创建单独的新线程/线程池来分析 Callable 任务的结果?或者还有其他好的解决方案吗? - 由于
Future
调用会阻塞调用者,是否值得使用此功能?如果我想分析任务的结果,我可以进行同步调用并检查调用的结果,而无需Future
。 - 使用
RejectionHandler
处理拒绝任务的最佳方法是什么?如果任务被拒绝,将任务提交到另一个线程或线程池,或者再次将相同的任务提交到当前ThreadPoolExecutor
,这是一个好的做法吗?
如果我对此功能的思考过程有误,请纠正我。
最佳答案
您的问题是关于在异步操作完成后执行操作。另一方面,如果您有一个不相关的 Activity 可以在异步操作运行时执行,那么 Future 就很好。然后,您可以通过 isDone()
定期轮询 Future
表示的操作,如果没有,则执行其他操作,或者如果没有,则调用阻塞 get()
您的当前线程不再有不相关的工作。
如果您想安排完成时操作而不阻塞当前线程,您可以使用 CompletableFuture
它提供了这样的功能。
关于java - Java Future 和 RejectionHandler 的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919462/