我需要一个包含 [key,Value] 对的容器。
此处key = Integer, Value = User Defined class object
。
多个线程正试图在上面的容器中添加[key,Value]对。
如果密钥已经存在于容器中,我想通过检查某些条件来更新该值。
最后,根据Key,我希望容器按排序顺序排列。
我的努力 -
我将此synchronizedSortedMap和Sorted Map用于上述任务。
SortedMap<Integer, USER_DEFINED_OBJECT> m = Collections.synchronizedSortedMap(new TreeMap<Integer, USER_DEFINED_OBJECT>());
这有助于我在上面的容器上同时添加对。
并且,是的如果密钥已经存在,那么我检查一些条件,然后继续。
我的方法总是线程安全吗?如果没有,请纠正我。
更新
答案 0 :(得分:3)
使用java.util包中的ConcurrentHashMap,阅读API ConcurrentHashMap
答案 1 :(得分:3)
java.util.concurrent.ConcurrentSkipListMap
可伸缩的并发ConcurrentNavigableMap实现。地图根据其键的自然顺序进行排序,或者根据使用的构造函数在地图创建时提供的比较器进行排序。 此类实现SkipLists的并发变体,为containsKey,get,put和remove操作及其变体提供预期的平均log(n)时间成本。插入,删除,更新和访问操作由多个线程安全地同时执行。迭代器是弱一致的,在迭代器创建时或之后的某个时刻返回反映地图状态的元素。它们不会抛出ConcurrentModificationException,并且可能与其他操作同时进行。升序键有序视图及其迭代器比降序视图快。
答案 2 :(得分:1)
通过并发集合,您可以在事务中调用put
,remove
等方法。因此它的线程安全。
根据我的理解,添加新[key, value]
对的方案如下:
value
我怀疑是否存在以线程安全方式为您执行此操作的实现。在我正确理解您的用例的情况下,您需要自己添加一些手动同步以进行更新步骤 transactional 。