ConcurrentHashMap 复合操作的安全性问题

要化茧的小虫 发布于 2014/11/20 12:21
阅读 274
收藏 0

对 ConcurrentHashMap 进行读写复合操作需要加锁吗?

private static ConcurrentHashMap<Integer, UnreadMap> userUnreadMsgCount = new ConcurrentHashMap<Integer, UnreadMap>();

public static int updateUnreadCache(Integer uid, Integer count) {
        synchronized (userUnreadMsgCount) {
            if (!userUnreadMsgCount.containsKey(uid)) {
                return -1;
            } else {
                RunLog.logDao.info("update [ " + uid + " ] from " + userUnreadMsgCount.get(uid).getUnread() + " to " + count);
                UnreadMap _unreadMap = userUnreadMsgCount.get(uid);
                userUnreadMsgCount.replace(uid, _unreadMap, new UnreadMap(uid, count, _unreadMap.getLateReadTime()));
                return count;
            }
        }
    }



这里进行获取,替换时,需要加锁吗
加载中
1
木木三
木木三

需要,单独一个操作不需要加锁,如果是符合操作,也就不是原子性质的了,需要加锁

0
y
yangyanggoods

我不太明白为何要取出对象,然后new了再放回去?直接用_unreadMap.setCount(count)不行么?这样的话就不用锁整个HashMap了,锁UnreadMap就行

要化茧的小虫
要化茧的小虫
呃,脑子抽抽了
返回顶部
顶部