我有一个使用axis2的异步Web服务,该服务使用相同的CallBack Hanlder调用两次不同的时间,如下所示:

stub.startGetData("Foo",callbackhandler)
 stub.startGetData("bar",callbackhanlder)

 ServiceCallBackhandler callbackhandler =  new ServiceCallBackhandler() { .....};
 //ServiceCallBackhanlder and stub are generated from a WSDL file

 Synchronized(callbackhandler){ callbackhandler.wait()}
 //remaining code to be executed
      ............
      ...........


这种情况下的问题是,一旦stub.startGetData("Foo",callbackhandler)之后调用返回,“剩余代码”就会执行。我希望回调函数等待直到它也完成了对stub.startGetData("boo",callbackhandler)语句的处理,然后执行剩余的代码。有没有一种方法可以不使用两个不同的回调处理程序,因为对两个返回值的处理是相同的。谢谢。

最佳答案

我想你想要这样的东西...

 import java.util.concurrent.CountDownLatch;
 ...

 // set the latch count to the nuber of callbacks to wait for
 CountDownLatch latch = new CountDownLatch(2);

 ServiceCallBackhandler callbackhandler =  new ServiceCallBackhandler() {
      public void handleResponse(Response response) {
           .... do real work ...
           latch.countDown();
      }
 };

 stub.startGetData("Foo",callbackhandler)
 stub.startGetData("bar",callbackhanlder)

 // wait for both callbacks to occur
 latch.await();


另请参见java.util.concurrent.Semaphore,但我认为CountDownLatch是您所描述的内容。

10-06 13:04