首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ConcurrentHashMap

使用ConcurrentHashMap
EN

Stack Overflow用户
提问于 2012-08-30 09:39:46
回答 4查看 491关注 0票数 2

我对Java中的线程很陌生,我需要从几个活动线程访问数据结构。我听说java.util.concurrent.ConcurrentHashMap是线程友好的。我是否需要在访问synchronized(map){}时使用ConcurrentHashMap,还是它将自己处理锁?

EN

回答 4

Stack Overflow用户

发布于 2012-08-30 09:41:11

它自己处理锁,实际上您无法访问它们(没有其他选项)。

您可以在特殊情况下使用synchronized进行写操作,但是很少需要这样做。例如,如果您需要实现自己的putIfAbsent,因为创建对象的成本很高。

对读取使用同步化将无法实现使用并发集合的目的。

票数 5
EN

Stack Overflow用户

发布于 2012-08-30 09:54:35

ConcurrentHashMap只适用于不需要任何原子性而不需要开箱即用的情况。例如,如果您需要获得一个值,使用它做一些事情,然后设置一个新值,所有这些都是在原子操作中,如果没有外部锁定,这是不可能实现的。

在所有这些情况下,没有什么可以替换代码中的显式锁,使用这个实现而不是使用基本的HashMap只是浪费。

票数 3
EN

Stack Overflow用户

发布于 2012-08-30 09:41:28

简短的回答:不,你不需要使用synchronized(map)

较长的答覆:

  • ConcurrentHashMap提供的所有操作都是线程安全的,您可以调用它们而不必担心锁定。
  • 但是,如果您需要一些操作在代码中是原子的,则仍然需要在客户端进行某种类型的锁定。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12194001

复制
相关文章

相似问题

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