我想使用jersey-client创建异步休息请求,该函数为我提供Futures,所以我可以在我的理解中调用get,如果请求完成,它将返回一些内容。
所以我想,我可以将Futures存储在地图中,并不时通过一个线程查看它们。或者我可能每次有人发送异步请求时都会创建一个新线程。还要求它不应该永远持续(超时)。
您怎么看?
答案 0 :(得分:1)
我经常使用List<Future<Void>>
存储期货。当get()
阻止时,我只是循环遍历它们而不是轮询它们。
还要求它应该永远持续(超时)。
我认为你的意思是不应该永远持续下去。这需要您用于发出请求的库中的支持。如果它们可以被中断,您可以在等待的线程或另一个ScheduledExecutorService中取消(true)未来。如果它们无法中断,您可能必须停止()线程,但仅作为最后的手段。
答案 1 :(得分:0)
javadoc说:
Future表示异步计算的结果。方法 用于检查计算是否完成,等待它 完成,并检索计算结果。结果 只能在计算时使用方法get检索 完成,必要时阻止,直到它准备好。
因此,您可以选择采用哪种策略:它主要取决于您对这些请求的处理方式。
您可以将这些Future
置于任何可迭代结构中,然后再进行处理。如果您可以非常快速地处理每个结果并且在等待其他期货已经返回时需要检查,则每个get
上的阻止可能是一种策略。