黑马程序员技术交流社区
标题:
HashMap线程安全的设计
[打印本页]
作者:
vipzh
时间:
2012-12-5 11:59
标题:
HashMap线程安全的设计
如何设计线程安全的hashMap,hashMap不是非线程安全吗?
作者:
但汉涛
时间:
2012-12-5 14:57
HashTable为线程安全的Map对象,但是现在的JDK不提倡使用HashTable。
而日常推荐使用的HashMap为非线程安全的对象,通过java.util.Collections可以把HashMap变为线程安全,在需要多线程环境中实现同步时使用。
Map map = Collections.synchronizedMap(new HashMap());
作者:
马清泽
时间:
2012-12-6 22:05
HashMap肯定不是线程安全的,这一点勿庸置疑。因为HashMap的get,set等方法都没有synchronized.
没有对HashMap写入的线程,仅有多个线程同时去读HashMap时也会线程不安全
下面代码参考别人的。
我看了下jdk1.5 hashmap get函数的源码
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2