Я внедряю систему динамических уведомлений (а-ля Facebook) для своего сайта с помощью API Servlet 3.0. Моя запланированная структура для поддержки этой функциональности:
- При каждой загрузке страницы отправьте XMLHTTP-запрос «получить» на сервер.
- Разрешить серверу создавать объекты AsyncContext из этих запросов «получить» и сохранять их в карте области приложения с ключом идентификатора веб-сайта пользователя.
- Всякий раз, когда пользователь выполняет действие, которое порождает уведомление, запрашивайте на карте области приложения идентификаторы друзей пользователя и, используя хранящиеся там объекты AsyncContext, отправьте уведомление каждому другу.
- Каждый из друзей получает уведомление.
Мой вопрос: нужно ли делать эту карту потокобезопасной? В худшем случае функция, действующая от имени «пользователя, отправляющего уведомление», отправит уведомление в устаревший асинхронный контекст на карте либо потому, что пользователь, которому она соответствует, в настоящее время переключает страницы и еще не отправить новый запрос XMLHTTP или вышел из системы.
Однако при каждой загрузке страницы у меня также есть код для получения всех уведомлений в базе данных, более новых, чем «дата последней проверки», поэтому при загрузке страницы уведомление пользователя не зависит от динамической системы уведомлений. Таким образом, пользователь все равно получит уведомление, если он переключает страницы (и, очевидно, концепция уведомлений не актуальна, если пользователь вышел из системы).
Учитывая эту информацию, есть ли какие-либо сценарии, которые потребуют, чтобы карта была потокобезопасной?