Java 如何以异步方式发出web请求

Java 如何以异步方式发出web请求,java,asynchronous,Java,Asynchronous,我需要从Java向RESTful服务器发出web请求。我希望我的Java代码能够异步处理响应。我正在寻找一个处理线程和请求回调的框架 顺便说一句,我看了一下FutureTask,它似乎不是我所需要的,因为它需要客户机等待它在某个时候完成。我正在寻找一个完成后的回调。这在java中很容易用Observer模式解决 创建扩展Observable并实现Runnable 实例化,将URL传递给它 主对象实现了观测者,将新类注册为观测者 运行Runnable,它执行阻塞HttpUrlConneciton

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


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

这在java中很容易用Observer模式解决

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

这在java中通过Observer模式很容易解决

  • 创建扩展
    Observable
    并实现
    Runnable
  • 实例化,将URL传递给它
  • 主对象实现了观测者,将新类注册为观测者
  • 运行Runnable,它执行阻塞HttpUrlConneciton,完成后将结果通知观察者
  • 必要时重复
顺便说一句,我看了一下FutureTask,它似乎不是我所需要的,因为它需要客户机等待它在某个时候完成

您不必从启动线程调用FutureTask.get()来获得任务的结果。您可以将
Callable
传递给
FutureTask
并处理将其输出传递给其他组件的过程。这里有
get()
方法,您可以获得异步计算的结果,如果计算尚未完成,则可能需要等待计算完成

如果您更喜欢回调样式,只需让可调用调用调用自己构造的回调或自己处理结果即可

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

您不必从启动线程调用FutureTask.get()来获得任务的结果。您可以将
Callable
传递给
FutureTask
并处理将其输出传递给其他组件的过程。这里有
get()
方法,您可以获得异步计算的结果,如果计算尚未完成,则可能需要等待计算完成


如果您喜欢回调样式,只需让可调用调用调用自己构造的回调或自己处理结果。

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


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


这是一个很好的建议,很有意义。我遇到了ThreadPoolExecutor类,它似乎提供了类似的功能。FutureTask有一个线程,还是使用一个线程池?FutureTask基本上只是围绕一个可调用的线程,并打算由ExecutorService(或类似的服务)使用。这是一个很好的建议,也是有意义的。我遇到了ThreadPoolExecutor类,它似乎提供了类似的功能。FutureTask有一个线程,还是使用一个线程池?FutureTask基本上只是围绕一个可调用的线程,并打算由ExecutorService(或类似的服务)使用。