我如何处理java中的回调

时间:2010-12-09 09:04:08

标签: java servlets asynchronous glassfish

我有一个servlet,它使用http get从另一个服务器请求地理定位。响应通过来自其他服务器的回调接收,最终在另一个servlet中。理想情况下,我想在第一个servlet上返回一个映射,并使这个异步机制同步。我现在所能提出的就是轮询一个共享的hashmap,直到值存在,这看起来有点像丑陋的黑客。我有什么想法可以更优雅地实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

在最基本的层面上,使用条件变量比非阻塞循环更有效。

// global, shared lock.
final Lock lock = new ReentrantLock();
final Condition locationReceived  = lock.newCondition(); 

// first servlet:
//
lock.lock();
try {
    requestLocation();
    if (!locationReceived.await(10, TimeUnit.SECONDS)) {
        // location was not received in the timeout.
    } else {
        // read location from shared object.
    }
} finally {
    lock.unlock();
}


// servlet that receives geolocation
//
lock.lock();
try {
    // set location in shared object.
    locationReceived.signal();
} finally {
    lock.unlock();
}