关于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最终的计数结果就是错误的。 有趣的问题,看哪位大虾能帮忙解决下 我的输入这块 什么问题呀?请赐教! 请问如何用Math类里的方法会一个圆 JTable如何在一个Cell中同时显示多种颜色或字体的字符? 一个++的问题!!!帮忙! 怎么知道一个IP是局域网的还是网外的? 用自己的类作为webservice的参数,不能反序列化的问题。 惆怅菜鸟请教: 用j2ee做web开发或搞电子商务 比用.net做 那些地方较有优势? 从IT公司辞职出来了,身边物品一概甩卖(1-5折,再加白送) JDK和SDK有什么区别?? Java中 null是一个对象还是一个值? 又是线程问题
2、 i = i + 1;
3、 map.put(key, i);如果AB两个线程交替执行,类似:
A:1
B:1
A:2
B:2
A;3
B:3最终的计数结果就是错误的。