如何以异步方式发出Web请求

我需要从Java向RESTful服务器发出Web请求。 我想让我的Java代码异步处理响应。 我正在寻找一个处理请求的线程和回调的框架。

顺便说一下,我看了一下FutureTask,它似乎不是我需要的,因为它要求客户端在某个时候等待它完成。 我正在寻找完成后的回调。

顺便说一下,我看了一下FutureTask,它似乎不是我需要的,因为它要求客户端在某个时候等待它完成。

您不必从启动线程调用FutureTask.get()以获取任务的结果。 您可以将传递给FutureTaskCallable也处理为将其输出传递给其他组件。 get()方法在那里,以便您可以获得异步计算的结果,这可能涉及等待计算完成(如果尚未完成)。

如果你更喜欢回调样式,你可以简单地让Callable调用你自己构造的回调或者自己处理结果。

使用Observer Pattern可以在java中轻松解决这个问题

  • 创建扩展Observable并实现Runnable
  • 实例化,将URL传递给它。
  • 主对象实现Observer ,以新类作为观察者注册
  • 运行Runnable,它会阻塞HttpUrlConneciton,完成后通知观察者结果
  • 必要时重复。

在GitHub上查看ning async http客户端项目。 它为您提供了使用Future的选项,或者为请求完成时定义回调:

https://github.com/sonatype/async-http-client