是否有同步和排序的映射对象(链接哈希表)



我正在创建一个servlet.Filter实现,其中我在将请求发送到servlet之前,根据IP地址在数据库中查找用户ID。

我希望我的过滤器将传入的请求存储到类似地图的对象中,如果已经有来自在数据库上查找的同一 IP 地址的请求。然后,当我从数据库获得响应时,我会将其应用于对该 IP 地址的所有请求,并在将它们发送到 servlet 的途中发送。

类似地图的对象需要同步,但也要保持广告顺序,以便在我找到用户 ID 后,所有隐藏的请求"将按照接收顺序进行处理"。

通过 API,有一个LinkedHashMap可以保持订单良好但不同步,HashTable是同步的,但没有给出任何指示它会保持正确的顺序。

我可以使用某种LinkedHashTable对象吗?

我正在使用Java 6。

您可以使用

synchronizedMap将任何Map实现包装在线程安全容器中:

Map<K, V> synchronizedLinkedHashMap = Collections.synchronizedMap(new LinkedHashMap<K, V>());

如果要使用Comparator对元素进行排序,也可以使用ConcurrentSkipListMap

您可以通过用java.util.Collections.syncdMap(...(包装任何底层映射来同步

因此,您将执行以下操作:

Map m = Collections.synchronizedMap(new LinkedHashMap());

你能使用Collections#synchronizedMap(Map)并传递它一个LinkedHashMap吗?这是最简单的方法。

更新:你也可以以某种方式利用Guava的MapMaker,但我认为这不是100%正确的。

您可以同步任何地图/集合:

Map<...> m = Collections.synchronizedMap(new LinkedHashMap());

synchronizedSet()synchronizedList()等等,甚至还有synchronizedSortedMap().

1. 使用 HashTable这是地图之间的同步地图

2.您也可以使用ConcurrentHashMap

最新更新