如果在使用AsyncHttpClient
调用外部系统时获得ListenableFuture<X>
,并且我立即调用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();
答案 0 :(得分:5)
根据ListenableFuture
实现的Future
接口契约,get()
返回Future
的结果,因此必须阻塞直到必要的计算完成。
如果系统A使用异步请求调用系统B,则在get()
调用之后立即执行Future
将无法获益,如果系统A正在调用get将导致系统A等待。
如果您希望系统A在B处理请求时继续执行操作,您可能希望向ListenableFuture添加回调或侦听器,以便A可以执行B返回时需要执行的操作(能够执行此操作)这就是ListenableFuture
存在的原因,事实上。)