获得ListenableFuture后立即获取()

时间:2016-09-02 13:37:38

标签: java asynchronous asynchttpclient

如果在使用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();   

1 个答案:

答案 0 :(得分:5)

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

如果系统A使用异步请求调用系统B,则在get()调用之后立即执行Future将无法获益,如果系统A正在调用get将导致系统A等待。

如果您希望系统A在B处理请求时继续执行操作,您可能希望向ListenableFuture添加回调或侦听器,以便A可以执行B返回时需要执行的操作(能够执行此操作)这就是ListenableFuture存在的原因,事实上。)