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