当前位置: 首页 > 面试题库 >

ConcurrentHashMap与同步HashMap

庄文栋
2023-03-14
问题内容

是用什么包装类之间的差异SynchronizedMap上,HashMapConcurrentHashMap

它只是能够HashMap在迭代(ConcurrentHashMap)的同时进行修改吗?


问题答案:

同步HashMap

  1. 每种方法都使用对象级锁进行同步。因此,synchMap上的get和put方法获取一个锁。

  2. 锁定整个集合是性能开销。当一个线程保持该锁时,其他任何线程都不能使用该集合。

ConcurrentHashMap 是在JDK 5中引入的。

  1. 在对象级别没有锁定,锁定的粒度要好得多。对于ConcurrentHashMap,锁定可以处于哈希图存储桶级别。

  2. 较低级别的锁定的结果是您可以拥有并发的读取器和写入器,而这对于同步集合是不可能的。这导致更多的可伸缩性。

  3. ConcurrentHashMap``ConcurrentModificationException如果一个线程试图修改它而另一个线程对其进行迭代,则不会抛出a 。

本文是Java
7:HashMap与ConcurrentHashMap

的很好阅读。强烈推荐。



 类似资料:
  • 问题内容: 我有一个ConcurrentHashMap,在其中执行以下操作: 我的问题是-是否有必要做多余的事情 检查同步块内部,以便其他线程不会初始化相同的哈希图值? 也许检查是必要的,但我做错了吗?我在做什么似乎有点可笑,但我认为这是必要的。 问题答案: *ConcurrentHashMap上的 *所有 操作都是线程安全的,但是线程安全的操作是不可组合的。您试图使原子操作成为一对操作:检查地图

  • 问题内容: 这样做,即ConcurrentHashMap(所有非retreival操作,等)需要在被包裹块?我知道所有这些操作都是线程安全的,因此这样做有真正的好处/需要吗?使用的唯一操作是和。 问题答案: 不,这样做会失去您的利益。您也可以使用with 或锁定整个表(这是在中包装操作时要执行的操作,因为隐含的监视器是整个对象实例。) 目的是通过允许在表上进行并发读/写而不锁定整个表来提高并发代码

  • 问题内容: 我们什么时候应该使用 的ReentrantReadWriteLock 相比, 同步 在Java的多线程环境中的关键字? 使用 ReentrantReadWriteLock而 不是Java中的 同步 有什么好处? 任何人都可以举一个例子(用Java)吗? 谢谢! 问题答案: 同步一次允许一个线程。 读/写锁可以同时允许多个读取器,但前提是没有写入器。因此,在某些使用情况下,由于读取器群体

  • 问题内容: 我有一个缓存类,其中包含一个存储缓存项。 我很好奇更改为会带来什么后果? 我会提高性能吗?此缓存是只读缓存。 最佳选择是什么?只是HashMap?缓存将按一定间隔进行填充。 问题答案: 首先,您似乎不了解关键字的作用。它确保如果声明的变量保留的 引用值发生更改,则其他线程将看到它,而不是拥有缓存的副本。它与访问线程安全无关。 鉴于此,并且您说的是只读事实,您当然不需要使用任何提供线程安

  • 问题内容: 由于Servlet 3.0 支持异步处理。使用始终异步处理会更好吗?或者在什么情况下同步处理更好? 问题答案: 异步Servlet带来的最大好处是HTTP push ,在该服务器中,服务器可以在选择时向客户端发送信息,而不是在客户端请求时将信息发送回客户端。在异步Servlet之前,这将需要长时间运行的HTTP连接,每个HTTP连接都会束缚服务器线程,这是非常低效的。这个新模型使服务器

  • 主要内容:同步时钟,实例,实例,异步时钟关键词: 同步,异步 由第 3 章可知,当触发器输入端的数据和触发器的时钟不相关时,很容易导致电路时序不满足。本章主要解决模块间可导致时序 violation 的异步问题。 关于异步与同步的定义,许多地方都有介绍,细节上也有所差异。本章主要的关注点是解决异步问题的方法,而不关心为什么会出现异步时钟,也不关心异步电路的具体结构,仅从异步时钟的时序结果去分析解决问题。 同步时钟 数字设计中,一般认为,