该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间: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集合类并不会抛异常,但这两种集合都是线程安全的。何来导致异常是线程安全的最具体体现? 我回帖的时候就想到了,没有提一致性,我就知道言多必失的吧。 |
|
返回顶楼 | |
发表时间:2012-05-07
concurre的东西拿来用就好了.如果你自己业务需要考虑线程安全问题.自己设计个数据结构,会发现跟提供的工具内容很多相似.封装到concurr包下的东西一般都是使用lock做了一定程度的优化.
map在get和put的时候在多线程的环境下会可能出现死循环. 或者用collection.synXXXXX的方法把这个map变成syn. |
|
返回顶楼 | |