我有一个使用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是您所描述的内容。