是否有同步的AND排序地图对象(LinkedHashTable)?

时间:2012-07-31 17:25:26

标签: java map synchronized java-6 linkedhashmap

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

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

类似地图的对象需要同步,但也要保持插入顺序,这样一旦我找到用户ID,所有存储的请求将按接收顺序处理&#34;。< / p>

通过API有一个LinkedHashMap可以保持订单正常但不同步,HashTable已同步,但没有任何迹象表明它会保持正确的顺序

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

我正在使用Java 6.

5 个答案:

答案 0 :(得分:9)

您可以使用synchronizedMap将任何Map实现包装在线程安全容器中:

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

如果您想使用Comparator订购元素,也可以使用ConcurrentSkipListMap

答案 1 :(得分:1)

您可以使用java.util.Collections.synchronizedMap(...)

包装任何基础地图,使其同步

所以,你会这样做:

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

答案 2 :(得分:1)

您可以使用Collections#synchronizedMap(Map)并传递LinkedHashMap吗?这是最简单的方法。

更新:您也可能以某种方式利用Guava's MapMaker,但我不认为这是100%的接触点。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

1。使用HashTable是地图中的同步地图

2。您也可以使用ConcurrentHashMap