gpt4 book ai didi

java - Hashtable 和 Collections.synchronizedMap(HashMap) 的区别

转载 作者:IT老高 更新时间:2023-10-28 20:37:31 25 4
gpt4 key购买 nike

据我所知,java.util.Hashtable同步 java.util.Map 中的每个方法接口(interface),而 Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托(delegate)给实际 hash_map 的同步方法(如果我错了,请纠正我)。

我有两个问题:

  1. 同步每个方法和拥有一个包装类有什么区别?有哪些场景可以选择其中一个?

  2. 当我们执行 Collections.synchronizedMap(hash_table) 时会发生什么?这是否等同于简单地使用普通的 java.util.Hashtable

最佳答案

我在这两个类的实现中可以发现的另一个区别如下:

Hashtable 类的所有方法都是同步的,即锁定是在方法级别完成的,因此可以说互斥锁在 处是always Hashtable 对象(this)级别。

Collections.synchronizedMap(Map) 方法返回SynchronizedMap 的实例,它是Collections 类的内部类。这个类的所有方法都在一个带有互斥锁的 Synchronized block 中。不同之处在于这里的互斥锁。内部类 SynchronizedMap 有两个构造函数,一个只接受 Map 作为参数,另一个接受 MapObject (mutex) 作为参数。默认情况下,如果使用第一个仅传递 Map 的构造函数,则 this 用作互斥体。不过,开发人员可以将另一个互斥对象作为第二个参数传递,通过该参数,Map 方法上的锁定将仅在该 Object 上,因此限制性小于 哈希表.

• 因此,Hashtable 使用方法级别的同步,但 Collections.synchronizedMap(Map) 为开发人员提供了一种灵 active ,可以通过 Synchronized 锁定提供的互斥锁 block 。

关于java - Hashtable 和 Collections.synchronizedMap(HashMap) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com