У вас уже есть ConcurrentHashMap iDAndStatus
, в котором хранится идентификатор и последний статус.Однако я бы только позволил потоку, который имеет дело со службой, создать новую запись в этой карте.
Когда сообщение приходит из канала, если идентификатор уже существует в iDAndStatus
, он просто изменяет статус,Если ключ не существует, просто временно сохраните обновления идентификатора / статуса в некоторой другой структуре данных, pendingFeedUpdates
.
Каждый раз, когда в iDAndStatus
создается новая запись, проверяйте pendingFeedUpdates
, чтобы увидеть, присутствуют ли какие-либо обновления для нового идентификатора.
Я не уверен, какую синхронизированную структуру данных использовать для pendingFeedUpdates
: вам нужно получить по идентификатору, но вы можете иметь много сообщений для каждого идентификатора, и вы хотите сохранить порядок сообщений.Может быть, синхронизированный HashMap, который связывает каждый идентификатор с каким-либо типом синхронизированной упорядоченной очереди?