首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的哈希表和同步

Java中的哈希表和同步
EN

Stack Overflow用户
提问于 2013-10-08 05:01:54
回答 1查看 13.5K关注 0票数 9

我读到过哈希表是线程安全的,因为它是同步的。请考虑下面的代码片段

代码语言:javascript
复制
if(!hashtable.contains(key)){
hashtable.put(key,value);
}

哈希表上的操作可能不同步。例如,如果Thread t1访问hastable并检查密钥,同时Thread t2在t1执行put之前检查密钥。现在,if块中有两个线程,键值的覆盖发生了。

所以同步块是必要的。

代码语言:javascript
复制
synchronized {
if(!hashtable.contains(key)){
    hashtable.put(key,value);
    }
}

这种理解是正确的吗?或者可加速对象在对可加速对象执行的操作上是安全的。当我阅读这篇post on race condition的时候,我产生了这样的疑问

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-08 05:04:28

您需要synchronized块的说法是正确的。Hashtable's方法是synchronized的,但是当在synchronized块之外调用多个方法时,您仍然有可能发生竞争。例如,内置的同步可以防止两个线程同时调用put时出现的问题。

您可能还想研究一下ConcurrentHashMap

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19234719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档