论坛首页 入门技术论坛

ConcurrentHashMap真的有必要吗

浏览 14079 次
该帖已经被评为新手帖
作者 正文
   发表时间:2012-04-24  
Pigwen 写道
引用
不谈指教了,虽然我的话很harsh,不中听,但确实是有用的。
第2点,我其实是说了的,文档里没有讲清楚具体的实现原理,看文档也看不明白太多东西,所以不如看源代码。

至于第1点,问题就更明显了。putIfAbsent?你可以这么想:
其实普通的非线程安全的Map,如HashMap,实际也是可以有这个方法的。Why not?

一个Map线程安全不安全,是其实现原理决定的。最具体的体现就是并发读(get)、写(put)的时候,是否会导致异常。

不知你能否同意,其实和你一样,我也不善表达,不善表达的人言多必失。我只能提供给思路吧。


哈哈,不存在,纯讨论。

先说第二点,在java.util.concurrent包的doc中说明了concurrent集合类的实现原理及与synchroinzed集合类的不同之处。另外,在ConcurrentMap.putIfAbsent方法的注释中也说明了这个方法的作用,甚至专门写出了代码的示例并指出这个方法是原子的。其实抛开文档是否写得清楚不说,一个好的习惯应该是先看javadoc再看源代码吧。

对于这个
引用
一个Map线程安全不安全,是其实现原理决定的。最具体的体现就是并发读(get)、写(put)的时候,是否会导致异常。

确实不敢苟同,读写时是否抛异常只是强一致性还是弱一致性的一个表现。当底层数据发生更改时,访问Synchronzied集合类会抛异常,而访问Concurrent集合类并不会抛异常,但这两种集合都是线程安全的。何来导致异常是线程安全的最具体体现?


我回帖的时候就想到了,没有提一致性,我就知道言多必失的吧。
0 请登录后投票
   发表时间:2012-05-07  
concurre的东西拿来用就好了.如果你自己业务需要考虑线程安全问题.自己设计个数据结构,会发现跟提供的工具内容很多相似.封装到concurr包下的东西一般都是使用lock做了一定程度的优化.
map在get和put的时候在多线程的环境下会可能出现死循环.
或者用collection.synXXXXX的方法把这个map变成syn.
0 请登录后投票
论坛首页 入门技术版

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