A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vipzh 中级黑马   /  2012-12-5 11:59  /  2298 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何设计线程安全的hashMap,hashMap不是非线程安全吗?

2 个回复

倒序浏览
HashTable为线程安全的Map对象,但是现在的JDK不提倡使用HashTable。
而日常推荐使用的HashMap为非线程安全的对象,通过java.util.Collections可以把HashMap变为线程安全,在需要多线程环境中实现同步时使用。
Map map = Collections.synchronizedMap(new HashMap());

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1

查看全部评分

回复 使用道具 举报
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;
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马