我已经通过以下链接 Problem with synchronizing on String objects? 和 http://illegalargumentexception.blogspot.com/2008/04/java-synchronizing-on-transient-id.html
现在我的问题:
而不是在整个地图上进行同步,我们尝试在userid上进行同步并导致一些随机行为,如果我们使用intern()它可以工作 第二个链接的方法也有效
问题:
答案 0 :(得分:3)
最好的方法是使用ConcurrentHashMap中的java.util.concurrent package。这个课程包含您需要的所有内容。不要重新发明轮子!
注意:Thilo是对的:您必须使用ConcurrentHashMap的特殊线程安全版本的put:putIfAbsent()
答案 1 :(得分:2)
使用ConcurrentMap<String, UserProperties>
。
获取相应UserProperties
的代码如下所示:
public UserProperties getProperties(String user) {
UserProperties newProperties = new UserProperties();
UserProperties alreadyStoredProperties = map.putIfAbsent(user, newProperties);
if (alreadyStoredProperties != null) {
return alreadyStoredProperties;
}
else {
return newProperties;
}
}