【发布时间】:2014-07-01 05:54:32
【问题描述】:
我需要一个包含 [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>());
这有助于我在上面的容器上同时添加对。
而且,是的,如果密钥已经存在,那么我检查一些条件,然后继续。
我的方法总是线程安全的吗?如果没有,请纠正我。
更新
- USER_DEFINED_OBJECT 有一些字段索引。
- 在添加时,我正在检查键是否已经存在,然后根据上面提到的(在第 1 点)提交的“索引”比较当前的 USER_DEFINED_OBJECT 和已经存在的 USER_DEFINED_OBJECT。如果当前的“索引”大于更新。
【问题讨论】:
-
只要同步整个“添加、更新”过程而不仅仅是添加,这应该是线程安全的。
-
ConcurrentHashMap是解决方案,然后按照您想要的顺序对其进行排序。看看this -
要判断您的代码是否是线程安全的,请提供其余部分。特别是检查条件。您可能有竞争条件。
-
@ChrisK 请检查更新的部分。
标签: java multithreading treemap