关于ConcurrentHashMap 最近想用java写个东西 其中涉及了多线程的读写(就是计数 例如A线程B线程同时请求,需要查看总连请求数然后再加一这种)。看见了ConcurrentHashMap,不知道如果我直接对一个静态的ConcurrentHashMap多线程进行读写,是否需要加锁?请各位大大明示,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ConcurrentHashMap本身无需加锁但是如果你操作ConcurrentHashMap是多步,你可能需要额外的锁来保证原子性,也极可能影响了ConcurrentHashMap的伸缩性 如2楼所说,从你的需求(计数)来看,是需要加锁的。否则可能产生脏读、脏写等问题。1、 Integer i = map.get(key);2、 i = i + 1;3、 map.put(key, i);如果AB两个线程交替执行,类似:A:1B:1A:2B:2A;3B:3最终的计数结果就是错误的。 大神高手菜鸟,都来看看了,纠结的题求解咯~! gcj和openjdk都是GPL的Java实现,区别在哪里? 为什么重写了equals方法,还是没法实现? 菜鳥問問題...大蝦不准拍我磚哈...謝謝!(小的如字母符號不算哈..) 为什么我的rmi 类文件编译通过以后 执行rmic命令 报 找不到类的错误呢 soft 求助:这是什么错误 rowset.jar的用法 用jbuild里,如何将struts架构相关的包包含进jbuild的工程里呀 我想知道java cpu现在是否有比较著名的公司制作? Java中 null是一个对象还是一个值? 又是线程问题
2、 i = i + 1;
3、 map.put(key, i);如果AB两个线程交替执行,类似:
A:1
B:1
A:2
B:2
A;3
B:3最终的计数结果就是错误的。