我想使用 jersey-client 来创建异步休息请求,该函数为我提供 Futures,所以我可以根据我的理解调用 get,如果请求完成,它将返回一些东西。
所以我在想,我可以将期货存储在地图中,并通过一个线程不时查看它们。或者也许我应该在每次有人发送异步请求时创建一个新线程。还有一个要求是它不应该永远持续(超时)。
你怎么看?
我想使用 jersey-client 来创建异步休息请求,该函数为我提供 Futures,所以我可以根据我的理解调用 get,如果请求完成,它将返回一些东西。
所以我在想,我可以将期货存储在地图中,并通过一个线程不时查看它们。或者也许我应该在每次有人发送异步请求时创建一个新线程。还有一个要求是它不应该永远持续(超时)。
你怎么看?
我经常使用 aList<Future<Void>>
来存储期货。作为get()
块,我只是循环浏览它们而不是轮询它们。
还有一个要求是它应该永远持续(超时)。
我想你的意思是它不应该永远持续下去。这需要您用来发出请求的库中的支持。如果它们可以被打断,您可以在您的等待线程或另一个 ScheduledExecutorService 中取消(true)未来。如果它们不能成为中断,您可能必须 stop() 线程,但只能作为最后的手段。
javadoc说:
Future 表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。结果只能在计算完成后使用方法 get 检索,必要时阻塞,直到它准备好。
因此,您可以选择采用哪种策略:这主要取决于您想对这些请求做什么。
Future
在遍历它们之前,您可以将这些s 放在任何可迭代的结构中。get
如果您可以非常快速地处理每个结果并且确实需要在等待时检查是否已经返回了其他期货,则阻止每个可能是一种策略。