- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
据我所知,java.util.Hashtable
同步 java.util.Map
中的每个方法接口(interface),而 Collections.synchronizedMap(hash_map)
返回一个包装器对象,其中包含将调用委托(delegate)给实际 hash_map
的同步方法(如果我错了,请纠正我)。
我有两个问题:
同步每个方法和拥有一个包装类有什么区别?有哪些场景可以选择其中一个?
当我们执行 Collections.synchronizedMap(hash_table)
时会发生什么?这是否等同于简单地使用普通的 java.util.Hashtable
?
最佳答案
我在这两个类的实现中可以发现的另一个区别如下:
• Hashtable
类的所有方法都是同步的,即锁定是在方法级别完成的,因此可以说互斥锁在 处是always Hashtable
对象(this
)级别。
• Collections.synchronizedMap(Map)
方法返回SynchronizedMap
的实例,它是Collections
类的内部类。这个类的所有方法都在一个带有互斥锁的 Synchronized
block 中。不同之处在于这里的互斥锁。内部类 SynchronizedMap
有两个构造函数,一个只接受 Map
作为参数,另一个接受 Map
和 Object
(mutex) 作为参数。默认情况下,如果使用第一个仅传递 Map
的构造函数,则 this
用作互斥体。不过,开发人员可以将另一个互斥对象作为第二个参数传递,通过该参数,Map
方法上的锁定将仅在该 Object
上,因此限制性小于 哈希表
.
• 因此,Hashtable
使用方法级别的同步,但 Collections.synchronizedMap(Map)
为开发人员提供了一种灵 active ,可以通过 Synchronized
锁定提供的互斥锁 block 。
关于java - Hashtable 和 Collections.synchronizedMap(HashMap) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875680/
在Collections类中,SynchronizedMap类有两个构造函数。一个只需要一个 map 实例,另一个则需要一个 map 和一个 mutex。 SynchronizedMap(Ma
我有一个单例类,它有一个可以被多个线程同时访问的映射。有人可以检查下面的代码并告诉我它的线程安全吗?(注意:我不打算使用ConcurrentHashMap,而且很少调用printMap方法。)
我试图理解 SynchronizedMap 并运行了以下代码。我得到以下输出,但有一个异常(exception)。根据我的理解,当线程仍在映射上执行写入或线程处于 sleep 状态时,get() 方法
来自 javadocs Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); //
什么时候应该更喜欢 Akka TransactionalMap与 SynchronizedMap 混合在一起的常规不可变映射反之亦然? (或者我在这里比较苹果和橙子?) 最佳答案 当您想要进行交易时,
假设我有一个类: public class MyMap implements Map, V> { ... } 我希望能够对其强制同步。一种方法是在内部同步方法(可能使用同步关键字),但如果我打算将
如果我同步 SynchronizedMap 会影响性能吗? 例如: private static Map intMap= Collections.synchronizedMap(new HashMap
如果我创建 map Map map=new HashMap(40,.75f); 通过以下两种不同的方式进行同步 Collections.synchronizedMap(map) :- which is
我想在 Collections.synchronizedMap 类型的 map 周围有第二个锁。我怎样才能拥有它? 最佳答案 尚不清楚为什么要这样做,但基本上是这样的: private Map map
当我将 Collections.synchronizedMap( ) 转换为 HashMap 时,它返回类转换异常,但是当我将 Map 转换为 HashMap 时,它工作正常。 根据我的理解 Coll
我的代码使用以下内容: public class Obj{ public String someOperation(){...} }; public class ClassA{ priva
在 Collections javadoc 中,它被提到如下.. 当遍历其任何 Collection View 时,用户必须在返回的 map 上手动同步: Map m = Collections.sy
今天我在面试中问了一个问题。问题是 Collections.synchronizedMap() 是用于同步 map,默认情况下它不像 hashmap 那样是线程安全的。他的问题是我们可以在这个方法中传
这个问题已经有答案了: Difference between Hashtable and Collections.synchronizedMap(HashMap) (6 个回答) 已关闭 9 年前。
Collections.synchronizedMap() 和所有方法同步的 HashMap 的包装器之间有什么区别。我没有看到任何区别,因为 Collections.synchronizedMap(
我指的是问题 here并使用作者代码示例,现在我的问题是 为什么作者使用synchronized(synchronizedMap),真的有必要吗,因为synchronizedMap总是确保没有两个线程
我没有看到使用 Collections.synchronizedList/synchronizedMap 的任何真正值(value),而且根据文档,我们需要在迭代期间同步列表/映射,这对性能不利。 我
我有一个Map,它将由多个线程同时修改。 Java API 中似乎存在三种不同的同步 Map 实现: 哈希表 Collections.synchronizedMap( map ) Concurrent
我在多线程代码之外创建了一个 HashMap 。以后这个 hasmap 不会有任何变化。 此后,我将启动两个线程,它们都将从该 HashMap 中读取(是的,仅读取操作)。如果线程1正在读取我的has
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!