我有一个使用axis2的异步web服务,我使用相同的CallBack汉化器调用了它两次,如下所示:
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)语句,然后执行剩下的代码。有没有办法不使用两个不同的回调处理程序,因为两个返回值的处理是相同的。谢谢。
发布于 2009-11-20 22:05:49
我想你想要这样的东西...
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正是您所需要的。
发布于 2009-11-12 19:10:42
一般来说,如果一个人想要等待N个不同对象的特定条件成立,他们应该考虑使用并发实用程序中的CyclicBarrier(N)或CountDownLatch(N)。
调用体的基本结构:
CountDownLatch my_latch = new CountDownLatch( 2 );
// These objects perform some asynchronous function when
// their start() method is called.
AsyncObject ao1 = new AsyncObject( my_latch, ... );
AsyncObject ao2 = new AsyncObject( my_latch, ... );
ao1.start(); // asynchronous, returns immediately
ao2.start(); // asynchronous, returns immediately
// my_latch.await() blocks until the latch has counted down to 0 from 2
my_latch.await();并从希望在其工作完成或满足条件时“发信号”的方法中:
{
// ... work ...
// work is complete
the_latch_passed_in_to_this_object.countDown();
}https://stackoverflow.com/questions/1717467
复制相似问题