Мне нужно использовать какую-то структуру данных для хранения ожидающих сетевых запросов.
В идеале мне нужна очередь, которая также предлагает доступ к карте, поскольку в основном операции выполняются следующим образом:
interface PendingRequestStore<K, V>
{
/* add item to queue with value v and key k */
void add(K k, V v);
/* remove and return value of first item in queue, or null if empty */
V pollFirst();
/* return the key of the first item in the queue, or null if empty */
K getFirstKey();
/* get item with key k, or null if absent */
V get(K k);
/* remove and return value of item in queue with key k, or null if absent */
V remove(K k);
}
Целью является хранение ожидающих запросов при их отправке;затем, когда я получаю ответ, я могу удалить запрос с указанным ключом.Ответы обычно не приходят в том порядке, в котором запросы были отправлены.Если бы я мог гарантировать своевременные ответы, для этого было бы достаточно обычного Map
, но бывают случайные сбои, когда мне также необходимо повторно отправить потерянные запросы в порядке их добавления в очередь.Поэтому я бы использовал очередь и карту, но тогда мне нужен способ удалить элементы в середине очереди, когда я получаю ответы, которые не в порядке.
Если янельзя избежать синхронизации, это нормально, но было бы неплохо также использовать параллельную структуру данных.
Есть предложения?
ПРИМЕЧАНИЕ : ключи имеютнет заказа, поэтому заказанная карта, например, ConcurrentSkipListMap
, не поможет мне.