У меня есть приложение, которое использует задание, похожее на cron, для обновления набора данных. Процесс обновления происходит раз в минуту и не длится долго. Сервлет предоставляет этот набор данных пользователям. Моя проблема заключается в том, что в процессе обновления запросы сервлета должны блокироваться и ждать завершения процесса.
В нижней строке у меня есть эти две функции:
private void updateData() {
}
public List getData() {
}
Первая функция запускается раз в минуту. Второй может быть вызван любое количество раз одновременно. При запуске updateData все вызовы getData должны ждать его завершения. Один вызов getData не должен блокировать последующие вызовы той же функции. Функция updateData имеет более высокий приоритет, чем getData, т.е. когда нужно запустить updateData, она должна ждать завершения всех вызовов getData, но запуск новых вызовов не должен разрешаться.
Какой механизм синхронизации я должен использовать для такого случая? Я использую сервер Java, но мне было бы интересно узнать, какие решения существуют и для других платформ.