论坛首页 入门技术论坛

ConcurrentHashMap真的有必要吗

浏览 14080 次
该帖已经被评为新手帖
作者 正文
   发表时间:2012-04-22   最后修改:2012-04-22
如果要在多个线程共享一个Map,就很有用了,这个时候用HashMap可能会有诡异的死循环。另外像boncp之类的貌似也用了这玩意儿哦...性能比dbcp好了不少...好吧,我没有自己求证过这一条
0 请登录后投票
   发表时间:2012-04-22   最后修改:2012-04-22
aa87963014 写道
接上面,由于操作map的这5个方法都没有同步,所以就算用了ConcurrentHashMap也是非线程安全的,反之如果这5个方法都实现了同步,那么map就算是使用hashmap也是线程安全的


这5个方法都同步,仍然是不安全的,因为你用他们进行组合以后,不是原子的
0 请登录后投票
   发表时间:2012-04-22  
线程安全不要脱离对象,所谓安全都是对对象本身而言,当前对象之外的安全由当前对象之外的对象来保证
0 请登录后投票
   发表时间:2012-04-22  
多线程环境下,map不参与具体业务 只用做容器的时候,ConcurrentHashMap就有作用了。
如果map参与业务, 还是用synchronized 或者 lock 来实现吧
0 请登录后投票
   发表时间:2012-04-22  
参与具体业务?请举例说明下。
0 请登录后投票
   发表时间:2012-04-22  
还有,业务系统如果不是线程安全的。就像一些开源jar都会指出是否是线程安全。

那么对于线程安全的追求应该到达什么样的地步,怎么评估线程不安全的隐患以及达到线程安全对程序性能的影响。
0 请登录后投票
   发表时间:2012-04-23  
多个线程可能同时用这个map的写数据化,或者一读一写,那肯定要的。
要看你具体的的业务了
0 请登录后投票
   发表时间:2012-04-23  
原子操作集合的话,还得用同步关键字。LZ说得对,其实很大程度上如果实现这样的效果,用hashmap也是没问题了。。。
0 请登录后投票
   发表时间:2012-04-23   最后修改:2012-04-23
在调用方法a之前进行map的Put操作(系统初始化),然后调用以下a,是不是就有用了,而且a方法也线程安全了
public User  a(key){  
  User user=map.get(key);  
 
  return user;
 
}
0 请登录后投票
   发表时间:2012-04-23  
ivywjhua 写道
多线程环境下,map不参与具体业务 只用做容器的时候,ConcurrentHashMap就有作用了。
如果map参与业务, 还是用synchronized 或者 lock 来实现吧

哥们是我下面这段代码这个意思吧

在调用方法a之前进行map的Put操作(系统初始化)
public User  a(key){  
  User user=map.get(key);  
 
  return user;
 
}
调用a,是不是就有用了,而且a方法也线程安全了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics