java:用于存储挂起的网络请求的线程安全数据结构(队列+映射)?

标签 java data-structures concurrency dictionary queue

我需要使用某种数据结构来存储待处理的网络请求。

理想情况下,我想要一个还提供 map 访问的队列,因为操作基本上如下:

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);
}

目的是在发出待处理的请求时存储它们;然后,当我收到响应时,我可以使用指定的 key 删除请求。响应通常不会按照请求发送的顺序到达。如果我可以保证及时响应,常规的 Map 就足够了,但偶尔也会出现故障,我还需要按照添加到队列的顺序重新发送孤立请求。因此,我会使用队列 map ,但是当我收到无序响应时,我需要一种方法来删除队列中间的项目。

如果我无法避免同步,那也没关系,但最好也使用并发数据结构。

有什么建议吗?


注意:键没有顺序,因此有序映射例如ConcurrentSkipListMap不会帮助我。

最佳答案

您所描述的内容对于不同步的 LinkedHashMap 看起来非常熟悉,但它提供了排序的概念,并且还将键映射到值。

关于java:用于存储挂起的网络请求的线程安全数据结构(队列+映射)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806585/

相关文章:

java - LibGDX 3D 提高性能

java - 指针和垃圾收集

sql - 使用 postgres 创建连续的证书编号

c++ - Happens-Before 关系 - 在 C++ 中谈论并发的原子对象是什么?

go - 可以在Go中的zipfile对象中创建目录吗?

java - JDB:com.sun.tools.example.debug.expr.ParseException:未知操作:%

查找数组内间隔的算法

c - 如何在所有操作后显示堆栈的大小

c - 三元搜索树的插入函数 - C

java - 数据库与数据表日期显示值不同