等待异步调用先完成,然后继续Java

时间:2011-02-12 18:19:41

标签: java asynchronous synchronous

我遇到这样一种情况:我调用一个方法,该方法进一步触发异步HTTP REST调用(稍后将状态发送到另一个端点)。我希望方法等到我将响应返回到端点,检查我得到的状态并继续进行。我正在寻找一个可行的Java解决方案。任何伪代码或实现都会有所帮助

看到类似的案例@ Lightweight way of waiting for a group of asynchronous Java calls,但对它是否容易实现并不太了解。

实施细节

我有JAX-RS端点来处理异步响应,如下所示

@POST
@Path("/status")
@Consumes("application/xml")
public Response processConfigStatus(@Context UriInfo uriInfo, ConfigStatus configStatus)
{
   // process Status got from the async REST call
   return ResponseHelper.createNoContentResponse();
}

处理和处理的类

Class ProcessData{

  public void updateData()
    checktStatus(uri);
    update();// should wait untill the processConfigStatus() endpoint gives status
  }

  private  checktStatus(String uri){
     // makes a REST call to a URI using a JAX-RS webclient or a httpclient this returns HTTP 200 or 204 code immediatley. And then the Server process the request asynchronously and gives back the status to JAX-RS endpoint(/status).
     post(uri);
  }

}

来自其他类的方法调用

ProcessData pd = new ProcessData()
pd.updateData();

2 个答案:

答案 0 :(得分:4)

如何使用CountDownLatch

  

允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。

答案 1 :(得分:0)

正如您提供的链接一样,您必须实现一种方法来简单地跟踪有多少异步调用仍在等待响应并等待该计数为零。


count = numAsyncCalls
..calling all of the RESTful services here (each call must have some sort of callback to decrement 'count' variable above..
while (count > 0)
   wait around

在您的链接中使用CountDownLatch看起来与我的伪代码

非常相似