Как мне обработать обратный вызов в Java - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть сервлет, который запрашивает геолокацию с другого сервера, используя http get. Ответ получен посредством обратного вызова с другого сервера и заканчивается в другом сервлете. В идеале я хотел бы вернуть карту первого сервлета и сделать этот асинхронный механизм синхронным. Все, что я могу придумать в данный момент, - это опросить общий хэш-файл, пока значение не появится, это выглядит как некрасивый взлом. Любые идеи, как я могу реализовать это более элегантно?

1 Ответ

3 голосов
/ 09 декабря 2010

На самом базовом уровне использование условной переменной более эффективно, чем неблокирующая петля.

// 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...