Vin*_*C M 46 java collections synchronization hashtable hashmap
据我所知,java.util.Hashtable同步java.util.Map接口中的每个方法,同时Collections.synchronizedMap(hash_map)返回一个包装器对象,其中包含将调用委托给实际的同步方法hash_map(如果我错了,请纠正我).
我有两个问题:
它与同步每个方法和包装类有什么区别?有哪些方案可以选择其中一种?
我们这样做会发生什么Collections.synchronizedMap(hash_table)?这是否等于简单地使用正常java.util.Hashtable?
小智 60
我在两个类的实现中可以找到的另一个区别如下:
• Hashtable类的所有方法都是同步的,即锁定是在方法级别完成的,因此可以说互斥锁始终处于Hashtableobject(this)级别.
•该方法Collections.synchronizedMap(Map)返回一个实例,SynchronizedMap该实例是该类的内部Collections类.此类在Synchronized具有互斥锁的块中具有其所有方法.不同之处在于互斥体.内部类SynchronizedMap有两个构造函数,一个只Map作为参数,另一个作为参数接受(Map和Object互斥).默认情况下,如果只使用一个合格的第一个构造函数Map,this作为一个互斥.尽管如此,允许开发人员传递另一个互斥对象作为第二个参数,通过该对象,Map方法上的锁定只会对此进行锁定Object,因此限制性较小Hashtable.
•因此,Hashtable使用方法级别同步,但Collections.synchronizedMap(Map)为开发人员锁定提供的带有Synchronized块的互斥锁提供了灵活性.
Nad*_*far 16
以下是我从一些(希望是正确的)研究得到的答案:
两者都提供相同程度的同步.如果您要Hashtable通过Collections.synchronized 进行换行,那么您将具有相同的度数,但具有另一个冗余层,具有同步性.
API级别之间的主要区别Hashtable和Collections.synchronizedMap(HashMap)存在更多.因为它Hashtable是Java遗留代码的一部分,所以您将看到HashtableAPI已得到增强以实现该Map接口,从而成为Java集合框架的一部分.这意味着,如果你是包装Hashtable过Collections.synchronizedMap(),包裹的API Hashtable将成为受限于MapAPI.因此,如果API Hashtable包含在您的行为定义中,那么它显然会被更改/限制.
| 归档时间: |
|
| 查看次数: |
23996 次 |
| 最近记录: |