该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-22
最后修改:2012-04-22
如果要在多个线程共享一个Map,就很有用了,这个时候用HashMap可能会有诡异的死循环。另外像boncp之类的貌似也用了这玩意儿哦...性能比dbcp好了不少...好吧,我没有自己求证过这一条
|
|
返回顶楼 | |
发表时间:2012-04-22
最后修改:2012-04-22
aa87963014 写道 接上面,由于操作map的这5个方法都没有同步,所以就算用了ConcurrentHashMap也是非线程安全的,反之如果这5个方法都实现了同步,那么map就算是使用hashmap也是线程安全的
这5个方法都同步,仍然是不安全的,因为你用他们进行组合以后,不是原子的 |
|
返回顶楼 | |
发表时间:2012-04-22
线程安全不要脱离对象,所谓安全都是对对象本身而言,当前对象之外的安全由当前对象之外的对象来保证
|
|
返回顶楼 | |
发表时间:2012-04-22
多线程环境下,map不参与具体业务 只用做容器的时候,ConcurrentHashMap就有作用了。
如果map参与业务, 还是用synchronized 或者 lock 来实现吧 |
|
返回顶楼 | |
发表时间:2012-04-22
参与具体业务?请举例说明下。
|
|
返回顶楼 | |
发表时间:2012-04-22
还有,业务系统如果不是线程安全的。就像一些开源jar都会指出是否是线程安全。
那么对于线程安全的追求应该到达什么样的地步,怎么评估线程不安全的隐患以及达到线程安全对程序性能的影响。 |
|
返回顶楼 | |
发表时间:2012-04-23
多个线程可能同时用这个map的写数据化,或者一读一写,那肯定要的。
要看你具体的的业务了 |
|
返回顶楼 | |
发表时间:2012-04-23
原子操作集合的话,还得用同步关键字。LZ说得对,其实很大程度上如果实现这样的效果,用hashmap也是没问题了。。。
|
|
返回顶楼 | |
发表时间:2012-04-23
最后修改:2012-04-23
在调用方法a之前进行map的Put操作(系统初始化),然后调用以下a,是不是就有用了,而且a方法也线程安全了
public User a(key){ User user=map.get(key); return user; } |
|
返回顶楼 | |
发表时间: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方法也线程安全了 |
|
返回顶楼 | |