java - 获取ListenableFuture后立即get()

标签 java asynchronous asynchttpclient

如果我得到 ListenableFuture<X>使用 AsyncHttpClient 调用外部系统时, 我调用 get()立即 - 当前线程是否会等到异步线程准备好响应?如果这是真的,那么使用 AsyncHttpClient 有什么好处? ?

AsyncHttpClient httpClient = new AsyncHttpClient();
ListenableFuture<Response> futureResponse = httpClient.execute(url, payload, headers);

// If this is immediately on next line, am I getting any benefit?
Response response = futureResponse.get();   

最佳答案

根据 Future ListenableFuture 实现的接口(interface)契约,get() 返回 Future 的结果,因此必须阻塞直到必要的计算完成。

Future 调用之后立即执行 get() 不会给您带来任何好处,如果系统 A 使用异步请求调用系统 B,紧接着调用 get 将导致系统A等待。

如果您希望系统 A 在 B 处理请求时继续做事,您可能希望向 ListenableFuture 添加一个 Callback 或 Listener,以便 A 可以在 B 回来时做它需要做的事情(做的能力事实上,这就是 ListenableFuture 存在的原因。

关于java - 获取ListenableFuture后立即get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293825/

相关文章:

c++ - 如何使函数异步信号安全?

javascript - 在清除的字符串中异步连接点击的数字

ruby-on-rails-4 - Rails 4、Turbolinks 和 Google Analytics - 跟踪异步模式点击会使常规跟踪无效

java - 如何使用 Netty 关闭异步 Http 请求的 AsyncHttpClient?

java - 在java中将输入 double 或浮点值转换为美国货币格式

java - 如果目标级别是 8,我可以使用 module-info.java 吗?

Java AsyncHttpClient : broken file while writing from LazyResponseBodyPart to AsynchronousFileChannel

java - 将 ForkJoinPool 与 AsyncHttpClient 一起使用 - 这有意义吗?

java - 使用 Eclipse 导出 jar 不保存更改?

java - 如何迭代绘制分形?